训练1:删除序列中相同的数
题目要求:
有16个数{1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10},已经按由大到小顺序排好,存储在数组a中
试建立一个类ARR,完成删除数组中相同的数,经过删除后,数组中的内容为{1,2,3,4,5,6,7,8,9,10}.
#include<iostream> #include<iomanip> using namespace std; class ARR { public: void ARR_delete(); ARR();//构造函数的声明不能用void void ARR_show(); private: int a[16]; }; ARR::ARR()//不能是void ARR::ARR() { int i; for(i = 0;i<16;i++) { cin>> a[i]; } } void ARR::ARR_delete() { int i,j,temp; temp = a[0]; for(j = 0;j<15;j++) { temp = a[j]; for(i = j+1 ;i<16;i++) { if(temp == a[i]) { a[i]= 0;//这种消除法是比较损耗内存的 } } } } void ARR::ARR_show() { int i,j; for(i= 0;i<16;i++) { if(a[i] !=0) cout <<setw(6)<< a[i]; } } int main() { ARR ARR_test;//定义一个对象; ARR_test.ARR_delete(); ARR_test.ARR_show(); return 0; }
总结编写的时候出现的bug
15行出现了返回值什么:错误是因为声明构造函数是void ARR();其实只是ARR就可一了
40行那个也是一样,void ARR::ARR(),其实只需要ARR::ARR();
函数改进的方法:
int main() { /*ARR ARR_test;//定义一个对象; ARR_test.ARR_delete(); ARR_test.ARR_show();*/ ARR *pt = new ARR; pt->ARR_delete(); pt->ARR_show(); delete pt; return 0; }