C++面向对象编程题 第22题

22. 试定义一个类 NUM,实现将一维数组中各整数元素去年去掉相同数字后再对数组从小到大排序。将一个整数去掉相同数字是指:如果一个整数中有相同的数字,则保留从左数起,第一次看到的那个数
字,而将其它的数字去掉。例如:数字 12324151 中有三个 1,两个 2,则去掉相同的数字后变为 12345。

具体要求如下:

  1. 私有数据成员
  • int *a;存放需要处理的数据。
  • int n;长度
  1. 公有成员函数
  • NUM(int t[],int len);构造函数,用t初始化a, len为t的元素个数。
  • void sort(int t[]);将数组t的元素从小到大排序。
  • int convert(int n);去除n中相同的数字并返回新得到的数。
  • int fun();将数组a的各元素去除相同的数字后从小到大排列。要求调用函数 convert()和sort()
  • void print();输出数组a的所有元素。
  1. 在主函数中对该类进行测试。
    用int a[5]={1213,65666,212313,12434,34435};这一数组初始化NUM n
    输出:
    1213 65666 212313 12434 34435
    65 123 213 345 1243
#include<iostream>
using namespace std;
class NUM{
    int *a,n;
public:
    NUM(int t[],int len){
        n=len;
        a=new int[n];
        for(int i=0;i<n;i++){
            a[i]=t[i];
        }
    }
    void sort(int t[]){
        for(int i=0;i<n-1;i++){
            for(int j=0;j<n-1-i;j++){
                if(a[j]>a[j+1]){
                    int a=t[j];
                    t[j]=t[j+1];
                    t[j+1]=a;
                }
            }
        }
    }
    int convert(int n){
        int t[100],count=0;
        while(n){
            t[count++]=n%10;
            n/=10;
        }
        int sum=0;
        for(int i=count-1;i>=0;i--){
            int j;
            for(j=count-1;j>i;j--){
                if(t[i]==t[j])break;
            }
            if(i==j){
            	sum=sum*10+t[i];
            }
        }
        return sum;
    }
    void fun(){
        for(int i=0;i<5;i++){
            a[i]=convert(a[i]);
        }
        sort(a);
    }   
    void print(){
        for(int i=0;i<n;i++)cout<<a[i]<<' ';
        cout<<endl;
    }
};
int main(){
    int a[5]={1213,65666,212313,12434,34435};
    NUM num(a,5);
    num.print();
    num.fun();
    num.print();
    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值