PTA(四十三)面向对象程序设计 实验五 7-2 利用类模板,定义数组类 (30 point(s)) 补做

7-2 利用类模板,定义数组类 (30 point(s))

定义一个类模板:

template<typename T>
class Array
{
   ……
};

具有对数组元素进行排序和求和的功能。在主函数中,从键盘读入若干int型、double型和char型数据,分别对整型数组、双精度数组和字符数组完成所要求的操作。

输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为int元素,2为double元素,3为char类型。若为int型元素,接着输入int数据,若为double元素,接着输入double数据,若为char型元素,三种类型的元素均以0结束。输入-1时表示全体输入结束。

输出格式:
int型、double型数据输出相应数组排序后的数据及数组的和,char型数据输出排序后的数组元素。

输入样例:
在这里给出一组输入。例如:

1 2 3 4 5 6 0
3 a s d e r q w t 0
2 1.1 2.3 5.6 7.8 0
-1

输出样例:
在这里给出相应的输出。例如:

[2,3,4,5,6]
20
[a,d,e,q,r,s,t,w]
[1.1,2.3,5.6,7.8]
16.8

收获

  • 0!=‘0’ 所以判断停止的时候不要混用
  • 不要用while(n);
  • 自己写的函数不要和头文件里的函数重名
  • 一部分一部分用cout测试。
#include<iostream>
#include<algorithm>
using namespace std;
template<typename T>
class Array
{   private:
    T arr[10010];
    int length;
    public:
    Array(){
        T temp;
        length=0;
        cin>>arr[length];
        //cout<<arr[length]<<endl;
        while(arr[length]!=0){
            if(arr[length]=='0'){
                break;
            }
            length++;
            cin>>arr[length];
            //cout<<arr[length]<<endl;
        }
        //cout<<length<<endl;
    }
    void my_sort(){
        sort(arr,arr+length);
    }
    T getSum(){
        T temp=0;
        for(int i=0;i<length;i++){
            temp+=arr[i];
        }
        return temp;
    }
    void display(){
        cout<<"[";
        for(int i=0;i<length;i++){
            if(i){
                cout<<","<<arr[i];
            }else{
                cout<<arr[i];
            }
        }
        cout<<"]\n";
    }

};
int main(){
    int n;
    cin>>n;
    while(n!=-1){
        switch (n)
        {
        case 1:{
            Array<int> a;
            // a.my_sort();
            a.display();
            cout<<a.getSum()<<endl;
            cin>>n;
            break;
        }

        case 2:{
            Array<double> b;
            b.my_sort();
            b.display();
            cout<<b.getSum()<<endl;
            cin>>n;
            break;
        }
        case 3:{
            Array<char> c;
            c.my_sort();
            //cout<<"sortendl"<<endl;
            c.display();
            //cout<<"display"<<endl;
            cin>>n;
            break;
        }
        default:

            break;
        }
    }

    return 0;
}

/*
1 2 3 4 5 6 0
-1
*/
/*
1 2 3 4 5 6 0
3 a s d e r q w t 0
2 1.1 2.3 5.6 7.8 0
-1
*/
/*
3 a s d e r q w t 0
-1
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值