PAT 甲级A1071 Speech Patterns (25 分)

题目在这里:我是题目

题目大意:给一行很长的输入,求出出现频率最高的单词以及出现次数。

思路:用map解决思路很简单,不赘述了直接看代码(有详细解析)

代码

#include <iostream>
#include <map>
#include <cctype>
using namespace std;
int main() {
    string s, t;
    getline(cin, s);				//注解1
    map<string, int> m;				//注解2
    for(int i = 0; i < s.length(); i++) {
        if(isalnum(s[i])) {		    //注解3
            t += tolower(s[i]);
        }
        if(!isalnum(s[i]) || i == s.length() - 1){
            if(t.length() != 0) m[t]++;
            t = "";
        }
    }
    int maxn = 0;
    for(auto it = m.begin(); it != m.end(); it++) {	
        if(it->second > maxn) {		//注解4(巧妙)
            t = it->first;
            maxn = it->second;
        }
    }
    cout << t << " " << maxn;
    return 0;
}

auto不懂的戳这里:我是链接
tolower不懂的戳这里:我是链接

代码注解:
1.getline(cin,s)表示读取输入的一行存入s
2.map<string,int>是map的声明格式,这里的意思是声明一个key为string,value为int类型的map,作为数据结构实现题目所需功能。
3.isalnum(s[i])是进行判断,如果 s[i]是一个数字或一个字母,则该函数返回非零值,否则返回0。此处s[i]对应的输入的string的每一个下标(当做char []来遍历)
4.if(it->second > maxn) :用大于号来判定完美切合题意,因为map会自动把key按照字典序排序,这样我们就能直接取到最大值的key和value,如果有重复的value也不影响。
上一篇:ABAP设计模式之---“结构型模式汇总(Structural Patterns)”


下一篇:java框架之spring