從前往後掃描,用兩個指針記下子字符串的起始位置和終止位置,並將分出來的詞存在記錄出現次數的map中即可
#include <iostream>
#include <string>
#include <map>
using namespace std;
bool isCharacter(char ch){
return (ch>='0' && ch<='9') || (ch>='a' && ch<='z') || (ch>='A' && ch<='Z');
}
int main(int argc, char const *argv[])
{
map<string,int> strs;
string rawStr;
getline(cin,rawStr);
string str;
int left,right;
left = right = 0;
for(int i=0; i<rawStr.length(); i++){
if(isCharacter(rawStr[i])){
if(rawStr[i]>='A' && rawStr[i]<='Z'){
rawStr[i] -= 'A'-'a';
}
right++;
}
else{
if(left<right){
str.assign(rawStr,left,right-left);
strs[str]++;
}
left = right = i+1;
}
}
if(left<right){
str.assign(rawStr,left,right-left);
strs[str]++;
}
int maxCnt = 0;
for(map<string,int>::iterator it=strs.begin(); it!=strs.end(); it++){
if((*it).second>maxCnt){
maxCnt = (*it).second;
str = (*it).first;
}
}
cout << str << " " << maxCnt;
system("pause");
return 0;
}