题解 | #字符统计#

字符统计

http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0

#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<char, int> a, pair<char, int> b) {    //自定义比较函数,先比较出现次数,出现次数相同再比较ASCII码值
    if(a.second>b.second)
        return true;
    else if(a.second == b.second)
        return a.first<b.first;
    else return false;
}
int main() {
    string str;    //存放输入的字符串
    while(getline(cin, str)) {    //获取输入的一行字符串
        vector<pair<char, int>> vec;    //存放字符串中出现的字母及其出现次数
        for(int i=0;i<str.length();i++) {    //对字符串中出现的每种字符进行计数
            vector<pair<char, int>>::iterator it;
            for(it=vec.begin();it!=vec.end();it++) {
                if(it->first == str[i]) {    //如果容器中存在该字符,那么该字符的数量加1
                    it->second++;
                    break;
                }
            }
            if(it == vec.end())    //容器vec中没有该字符,在容器vec中新增一个数值对
                vec.push_back(make_pair(str[i], 1));
        }
        sort(vec.begin(), vec.end(), cmp);    //sort函数使用自定义的排序规则进行排序
        for(int i=0;i<vec.size();i++)    //输出排序后的字符
            cout<<vec[i].first;
        cout<<endl;
    }
}
全部评论
使用STL:map<string> ::find(str)更快,若找到str,数量+1,未找到新加pair</string>
点赞 回复 分享
发布于 2021-11-21 17:52

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客企业服务