PAT(甲级)渡劫(二十七)-Speech Patterns (25)
题目大意:
分割字符串的用法+map映射
给出input中出现次数最多的单词,如果次数相同,给出按字典序最小的。
这里我用了自定义分隔符来读取字符串,方法如下:
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <map>
using namespace std;
/*
分割字符串的用法+map映射
给出input中出现次数最多的单词,如果次数相同,给出按字典序最小的。
*/
const int maxn=1048576+5;
char str[maxn];
char words[maxn];
map<string,int> maps;
int main()
{
gets(str);
int len=strlen(str);
//多加了一些非字母数字的符号,样例才全部过
const char *d = "\n\'\"\? :!,.~`%@$#*^&()-+<>[]_";
char *p;
p = strtok(str,d);
int ans=0;
string ss,answords;
while(p)
{
sprintf(words,"%s",p);
//printf("%s\n",words);
p=strtok(NULL,d);
int wordslen=strlen(words);
for(int i=0;i<wordslen;i++){
words[i]=tolower(words[i]);//转小写
}
ss=words;
maps[ss]++;
if(maps[ss]>ans){
ans=maps[ss];
answords=ss;
}
else if(maps[ss]==ans && ss.compare(answords)<0){
ans=maps[ss];
answords=ss;
}
}
cout<<answords<<" "<<ans<<endl;
return 0;
}