牛客网题解 | 单词识别

单词识别

一、题目链接

单词识别

二、题目

三、代码

cpp 复制代码
#include <iostream>
using namespace std;
#include <string>
#include <map>
#include <set>
typedef pair<string, int> Word;
class Compare 
{
  public:
    bool operator()(const Word& left, const Word& right) const 
    {
        // 次数从大到小排序
        // 如果次数相同,再按照单词字典序排序
        return (left.second > right.second) ||
               (left.second == right.second && left.first < right.first);
    }
};
int main() 
{
    string s;
    while (getline(cin, s)) 
    {
        map<string, int> m;
        string temp;

        // 分割单词,采用map统计每个单词出现的次数
        for (size_t i = 0; i < s.size(); ++i) 
        {
            if (s[i] == ' ' || s[i] == ',' || s[i] == '.') 
            {
                // 一个单词解析结束
                if (temp != "")
                    m[temp]++;
                temp = "";
            } 
            else 
            {
                // 注意:题目已说明不区分大小写,那么A和a算是一个单词,故需要将大小写统一
                temp += tolower(s[i]);
            }
        }

        // 将map中的<单词,次数>放到set中,并按照次数升序,次数相同按照字典序规则排序
        set<Word, Compare> s(m.begin(), m.end());

        // 将本次统计到的结果按照要求输出
        for (auto& e : s)
            cout << e.first << ":" << e.second << endl;
        cout << endl;
    }
    return 0;
}
相关推荐
峰顶听歌的鲸鱼2 分钟前
29.Linux防火墙管理
linux·运维·网络·笔记·学习方法
青草地溪水旁12 分钟前
设计模式(C++)详解——解释器模式(2)
c++·设计模式·解释器模式
jun~19 分钟前
SQLMap绕过 Web 应用程序保护靶机(打靶记录)
linux·笔记·学习·安全·web安全
Kevinhbr32 分钟前
CSP-J/S初赛赛后总结
c++·程序人生·ccf csp-j/s
MoRanzhi120337 分钟前
9. NumPy 线性代数:矩阵运算与科学计算基础
人工智能·python·线性代数·算法·机器学习·矩阵·numpy
每天更新39 分钟前
linux驱动开发笔记
linux·驱动开发·笔记
倔强的石头1061 小时前
解决Markdown笔记图片失效问题:Gitee+PicGo图床搭建全攻略
笔记·gitee·picgo·obsidian
Zewen PAN1 小时前
新手 Visual Studio 环境配置 详解
c++·ide·visual studio
新子y1 小时前
《代码的“言外之意”:从词源学透彻理解编程》字符的“双重生活”:从Escape到Raw
笔记·python
aaaaaaaaaaaaay1 小时前
代码随想录算法训练营第五十一天|99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积
算法·深度优先