dasuangegege 2021-09-06 15:15 采纳率: 50%
浏览 43
已结题

用c++语言解答,方便的话给一下解题思路

【字符串】
16.*【题目】定义字符串(String)类,完成对字符串的操作。具体要求如下:
(1)私有数据成员
char str[80]; 存放字符串
int count[26]; 各字符出现的频率
(2)公有成员函数
构造函数String (char *s) : 初始化成员字符串数据str。
void process():统计字符串各字符的出现频率。
void print ( ) :输出各字符及出现频率。(思考:如何按字符出现频率降序输出)
(3)编写一个程序测试该类。
例:字符串为:abathiyttaftdabahjhj
按字符顺序输出字符(出现频率) :a(5) b(2) d(1) f(1) h(5) i(1) j(2) t(4) y(1)
按字符出现频率降序输出字符(出现频率) :a(5) h(5) t(4) b(2) j(2) i(1) y(1) f(1) d(1)

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-09-06 15:40
    关注

    代码如下:

    #include <iostream>
    using namespace std;
    class String
    {
    private:
        char str[80];
        int count[26];
    public:
        String(char* s);
        void process();
        void print();
    };
    
    String::String(char* s)
    {
        int i = 0;
        for(i=0;i<26;i++)
            count[i] = 0;
        i = 0;
        while(s[i] != '\0')
        {
            str[i] = s[i];
            i++;
        }
        str[i] = 0;
    }
    
    void String::process()
    {
        int i=0;
        int tt = 0;
        while(str[i] != '\0')
        {
            tt = str[i]- 'a';
            count[tt]++;
            i++;
        }
    }
    
    void String::print()
    {
        //按照字符顺序输出
        cout << "按照字符顺序输出:"<<endl;
        for(int i = 0;i<26;i++)
        {
            if(count[i] == 0)
                continue; //跳过出现0次的
            char ch = 'a' + i;
            cout << ch << "(" << count[i] << ")" ;
        }
        cout << endl;
        //按照出现频率输出
        cout << "按照出现频率输出:" << endl;
        int ab[26];
        for(int i = 0;i<26;i++)
            ab[i] = i;
        //按照出现频率排序
        for (int i = 0;i<25;i++)
        {
            for (int j = 0;j<25-i;j++)
            {
                if(count[j] < count[j+1])
                {
                    int tmp = count[j];
                    count[j] = count[j+1];
                    count[j+1] = tmp;
    
                    tmp = ab[j];
                    ab[j] = ab[j+1];
                    ab[j+1] = tmp;
                }
            }
        }
        for (int i = 0;i<26;i++)
        {
            if(count[i] == 0)
                continue; //跳过出现0次的
            char ch = 'a' + ab[i];
            cout<< ch << "(" << count[i] << ")";
        }
        
    }
    
    int main()
    {
        char* p = "abathiyttaftdabahjhj";
        String ss(p);
        ss.process();
        ss.print();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: