牛客网题解 | 单词识别

单词识别

一、题目链接

单词识别

二、题目

三、代码

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;
}
相关推荐
dlraba8023 小时前
机器学习-----K-means算法介绍
算法·机器学习·kmeans
芥子须弥Office4 小时前
从C++0基础到C++入门 (第二十五节:指针【所占内存空间】)
c语言·开发语言·c++·笔记
啊阿狸不会拉杆4 小时前
《算法导论》第 14 章 - 数据结构的扩张
数据结构·c++·算法·排序算法
Starry_hello world5 小时前
MySql 表的操作
数据库·笔记·mysql
Q741_1475 小时前
如何判断一个数是 2 的幂 / 3 的幂 / 4 的幂 / n 的幂 位运算 总结和思考 每日一题 C++的题解与思路
开发语言·c++·算法·leetcode·位运算·总结思考
小王爱学人工智能5 小时前
快速了解DBSCAN算法
算法·机器学习·支持向量机
小沈同学呀6 小时前
阿里巴巴高级Java工程师面试算法真题解析:LRU Cache实现
java·算法·面试
我今晚不熬夜6 小时前
使用单调栈解决力扣第42题--接雨水
java·数据结构·算法·leetcode
使二颗心免于哀伤7 小时前
《设计模式之禅》笔记摘录 - 14.组合模式
笔记·设计模式·组合模式
ZHSH.7 小时前
20250810 | 深度学习入门笔记1
笔记