编写程序对于给定的字符数组统计阿拉伯数字数字0-9出现的次数,并对数字出现的次数进行降序排序,然后对各个数字按照降序序列输出数字及出现次数。

char str[200] = {"109238475629020349ejlqjwlrqusfwkjrop345678<>jlsjf0293847348599357838237473728838383856"};
要求:iostream库,冒泡排序

供参考:

#include<iostream>
using namespace std;
int main()
{
    int  num[10] = {0,1,2,3,4,5,6,7,8,9}, cnt[10] = {0}, i, j, t;
    char str[200] = {"109238475629020349ejlqjwlrqusfwkjrop345678<>"
                     "jlsjf0293847348599357838237473728838383856"};

    for (i = 0;str[i]; i++){ // 统计
        if (str[i] >= '0' && str[i] <= '9')
            cnt[str[i] - '0']++;
    }
    for (i = 9; i > 0; i--){   // 排序
        for (j = 0;j < i; j++){
            if (cnt[j] < cnt[j + 1]) {
                t = cnt[j], cnt[j] = cnt[j+1], cnt[j+1] = t;
                t = num[j], num[j] = num[j+1], num[j+1] = t;
            }
        }
    }
    for (i = 0; i < 10; i++)  // 输出 数字:出现次数
        cout << num[i] << ":" << cnt[i] << endl;
    return 0;
}

  • 以下回答由chatgpt基于相关博客总结生成:
    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
        string str;
        getline(cin, str);
        int nums[10] = {0};
        for(int i = 0; i < str.size(); i++) {
            if(isdigit(str[i])) { // 判断是否为数字
                nums[str[i] - '0']++;
            }
        }
    
        // 冒泡排序
        for(int i=0;i<10;++i) {
            for(int j=i+1;j<10;++j) {
                if(nums[i]<nums[j]) {
                    swap(nums[i],nums[j]);
                }
              }
            }
    
        // 输出结果
        for(int i = 0; i < 10; i++) {
            if(nums[i]!=0) {
                cout << i << ": " << nums[i] << "次" << endl;
            }
        }
        return 0;
    }