/********************************************* * * c++程序设计实践指导 * * 1.1删除序列中相同的数 * **********************************************/ #include <iostream> using namespace std; class ARR { int m; //数组实际元素个数 int *p; //存放原始数组及结果数组 int *c; //存放记录数据重复次数的数组 public: ARR (int x[],int size) //构造函数,用size初始化m,用参数x初始化p { m = size; p = new int[size]; c = new int[size](); //数组每一个元素初始化为0 for (int i = 0; i < m; i++) { p[i] = x[i]; } } void delsame(); //完成删除相同数据的功能 void show() //输出到屏幕显示 { for (int i = 0; i < m; i++) { cout << p[i] << "\t"; } cout << endl; } void count(); //完成统计每一个数据重复此处并输出到屏幕的功能 }; void ARR::delsame() //删除相同数据 { int i,j; for(i = 0; i < m-1; i++) { if(p[i] == p[i + 1]) //若存在相同数据,则以后数据向前覆盖 { for(j = i+1; j < m-1;j++) p[j] = p[j+1]; m--; i--; //存在覆盖后仍然有重复数据的可能,故要从当前i继续断定 } } cout << endl; } void ARR::count() //统计每一个数据的重复次数 { int i,j; int k = 0; for(i = 0; i < m; i++) { if(p[i] == p[i+1]) //若存在相同数据,则以后数据向前覆盖 { c[k] += 1; for(j = i+1; j < m; j++) p[j] = p[j+1]; m--; i--; //存在覆盖后仍然有重复数据的可能,故要从当前i继续断定 } else { c[k] += 1; //按照平常计数习惯,为每一个元素值加1 cout << c[k] << "\t"; k++; } } cout << endl; } int main() { int b[16] = {1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10}; ARR v(b, sizeof(b)/sizeof(b[0])); v.show(); //显示原数组 v.delsame(); v.show(); //显示结果数组 ARR w(b,sizeof(b)/sizeof(b[0])); w.count(); //显示统计数组 system("pause"); return 0; }