在第二个while已开始没有加!=’\0’,那么s越界后,会产生随机字符,影响下一个while循环的结果。
#include<iostream>
#include<map>
#include<string>
using namespace std;
map<string,int> mp;
bool chek(char x)
{
if(x>='A'&&x<='Z')
return true;
else if(x>='a'&&x<='z')
return true;
else if(x>='0'&&x<='9')
return true;
else
return false;
}
int main()
{
string s,word;
int i=0,max=0;
getline(cin,s);
while(i<s.length())
{
while(!chek(s[i])&&s[i]!='\0')
i++;
while(chek(s[i]))
{
if(s[i]>='A'&&s[i]<='Z')
s[i]=s[i]+32;
word+=s[i];
i++;
}
mp[word]++;
word={};
}
for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++)
{
if(it->second>max)
{
max=it->second;
word=it->first;
}
}
cout<<word<<' '<<max;
return 0;
}