入门oj 5499: 讲话模式
最编程
2024-02-11 19:02:37
...
Description
每个人说话都有口头禅,现给出一个字符串,请求出其中出现次数最多的单词(不区分大小写)。
Input
输入一行,长度小于等于1048576的字符串
输入至少包含一个字母或数字
输入至少包含一个字母或数字
Output
输出一行,为出现次数最多的单词及出现的次数,用空格分开
如果结果不唯一,则输出字典序最小的那个,这个单词必须以小写的形式输出。
如果结果不唯一,则输出字典序最小的那个,这个单词必须以小写的形式输出。
Sample Input
Can a can can a can? It can !
Sample Output
can 5
HINT
1简单的一个map题
2这个题的读入比较恶心,需要转大小写,还要判空格和标点,具体方法如代码
#include<bits/stdc++.h>
using namespace std;
int f[1000001],ans;
char s[1048579];
map<string,int> a;
map<string,int>::iterator flag;//迭代器
int main(){
gets(s);
int len=strlen(s);
string q="";
for(int i=0;i<len;i++){
if(s[i]==' ') {
a[q]++;
q="";
continue;
}//判空格,如果是空格那么就表示一个单词结束了,可以把这个单词打入map
if(s[i]>='A'&&s[i]<='Z') s[i]+=32;//大写转小写
if(s[i]>='a'&&s[i]<='z') q+=s[i]//如果这个字符是一个字母,就把他放入q串 ;
}
for(map<string,int>::iterator i=a.begin();i!=a.end();i++) //迭代器
if(ans<(*i).second)
flag=i,ans=(*flag).second; //算出最大值
cout<<(*flag).first<<" "<<(*flag).second;
}
推荐阅读