训练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;
}
原文地址:https://www.cnblogs.com/fengdashen/p/3890389.html