22. 试定义一个类 NUM,实现将一维数组中各整数元素去年去掉相同数字后再对数组从小到大排序。将一个整数去掉相同数字是指:如果一个整数中有相同的数字,则保留从左数起,第一次看到的那个数
字,而将其它的数字去掉。例如:数字 12324151 中有三个 1,两个 2,则去掉相同的数字后变为 12345。
具体要求如下:
- 私有数据成员
- int *a;存放需要处理的数据。
- int n;长度
- 公有成员函数
- 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的所有元素。
- 在主函数中对该类进行测试。
用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;
}