华为OJ-字符统计

在刷华为OJ的时候做到一道关于字符统计的题目,题目是这样:
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计。

之前的方法有点麻烦,现在想到了一种比较简便的方法,代码如下:

struct fun{
    int ss;
    int count;
};
bool cmp(const fun&a, const fun&b){
    return a.count > b.count;
}
void hwOJ(){
    fun result[128] = { 0 };
    int book[128] = { 0 };
    string str;
    getline(cin, str);
    for (int i = 0; i < 128; ++i)
    {
        result[i].ss = i;
        if (i < str.length()){
            ++result[str[i]].count;
        }
    }
    sort(result, result + 128, cmp);
    for (int i = 0; i < 128; ++i)
    {
        if (result[i].count != 0){

            cout << (char)result[i].ss;
        }
    }
    cout << endl;
}

使用了

sort(result, result + 128, cmp);

避免了编写排序代码。

你可能感兴趣的:(C++,OJ)