题目粗心:

给出一个字符串,要求统计呈现次数最多的单词,并且输入该单词和次数(不辨别大小写,输入小写),单词为数字和英文字母的组合

算法思路:

间接一边输出一边解决就好,应用c保留输出的每一个字符,s保留呈现的每一个单词,如果是大写字符就转化为小写字符,而后将c增加到s的开端,如果是小写字符或者数字将c增加到s的开端,如果是其余字符并且s不为空,就开始统计该单词呈现的次数,同时判断以后单词s的次数是否为最大,如果是就更新max_count和r(保留输入后果),最初如果是回车就退出循环,输入后果即可

留神点:

1、如果输出a,该当输入a 1,对应测试点4,这里的解决就是在最初判断是否是回车,让统计次数逻辑首先进行。

提交后果:

AC代码:

#include <cstdio>#include <unordered_map>#include <string>using namespace std;unordered_map<string,int> counts;//每一个word呈现的频次int main(){    char c;    string s;// 暂存每一个单词    int max_count = -1;// 呈现的最高频次    string r;// max_count对应的word    while (true){        scanf("%c",&c);        if(c>='A'&&c<='Z'){            // 大写字符转化为小写字符            c = c+32;            s += c;        } else if((c>='a'&&c<='z')||(c>='0'&&c<='9')){            // 小写字母或者数字            s += c;        } else {            // 不是英文字符            if(!s.empty()){                ++counts[s];                if(counts[s]>max_count){                    max_count = counts[s];                    r = s;                }                s = "";// 清空s            }        }        if(c=='\n') break;    }    printf("%s %d",r.c_str(),max_count);    return 0;}