题目大意: 求一组字符串中,单词出现次数最多的单词,如果有并列的次数,输出字典顺序里第一个;
分析:该题定义了单词可以是字母与数字的组合其他字符全是分隔符,其中含有空格,所以需要用getline输入,之后在统计单词。
注意:最后一个单词也需要统计,不统计有一个测试点会报段错误。
代码:
#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
map<string,int>arr;
int main(){
string s;
getline(cin,s);
string t;
for(int i=0;i<s.size();++i){
if(s[i]>='A'&&s[i]<='Z'){
s[i]+=32;
t.push_back(s[i]);
}else if(s[i]>='a'&&s[i]<='z'){
t.push_back(s[i]);
}else if(s[i]>='0'&&s[i]<='9'){
t.push_back(s[i]);
}else{
if(t.size()>0){
arr[t]++;
t.clear();
}
}
}
//处理最后一个单词
if(t.size()>0)
arr[t]++;
int max=0,index=0;string t1;
for(auto it=arr.begin();it!=arr.end();++it){
if(it->second>max){
max=it->second;
t1=it->first;
}
}
cout<<t1<<" "<<max;
return 0;
}