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

6.建立一个类 STR,连接两个字符串后,将结果字符串中的字符排成升序。例如,字符串 s1 的值为“pear”,字符串 s2 的值为“apple”,将 s1 与 s2 连接后得到字符串“pearapple”,存入字符数组 s3,排序后得“aaeelpppr”
  1. 私有数据成员:
    char s1[80], s2[80],分别存放两个原始字符串;
    char s3[160],存放结果字符串。
  2. 公有成员函数:
    STR(char a[],char b[]),构造函数,用字符串参数 a 和 b 分别初始化数据成员字符串 s1 和 s2;
    void consort(),合并字符串后存入 s3,再对 s3 中的字符排序;
    void show(),输出两个原始字符串和结果字符串。
  3. 在主程序中定义两个字符数组 char a[80], b[80],任意输入两个字符串,再定义一个 STR 类对象 str,用字符串 a 和 b 初始化该对象,然后按上述要求测试该类。可自行输入任意两个字符串做测试数据。
#include<iostream>
#include<cstring>
using namespace std;
class STR{
    char s1[80],s2[80],s[160];
public:
    STR(char a[],char b[]){
        strcpy(s1,a);
        strcpy(s2,b);
    }
    void consort(){
        strcpy(s,s1);
        strcat(s,s2);
        int len=strlen(s);
        for(int i=0;i<len-1;i++){
            for(int j=0;j<len-i-1;j++){
                if(s[j]>s[j+1]){
                    char t=s[j+1];
                    s[j+1]=s[j];
                    s[j]=t;
                }   
            }
        }
    }
    void print(){
        cout<<s1<<endl;
        cout<<s2<<endl;
        cout<<s<<endl;
    }
};
int main(){
    char a[80],b[80];
    cin.getline(a,80);//这里第二个参数与数组大小一样就行了,不管输入多长的字符,最终只会接受n-1,最后一位是'\0'
    cin.getline(b,80);//然而,当连续两个getline在一起时,第一个就不能随意输入超过n了,结果会出现问题,可以自己把参数改小一点试一下
    /*原理大概是:当你输入的字符超过n个时,failbit被设定1,cin不可用,所以下面就输入不进去了;
    当使用cin.clear()清除错误状态,将failbit设置为0,才可以继续读取队列中的内容。*/
    STR str(a,b);
    str.consort();
    str.print();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值