1071. Speech Patterns (25)

来源:互联网 发布:mac卸载office 编辑:程序博客网 时间:2024/06/05 16:14

题目链接:https://www.patest.cn/contests/pat-a-practise/1071


题目大意:给出一个字符串,以回车结束。找出字符串中的非字母和数字字符,然后将整个字符串在这些非字母数字字符出切割,得到若干个由字母数字组成的单词,找出数量最多的单词


解题思路:

  • map的使用
  • isalnum()和tolower()的使用

代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <cctype>using namespace std;int main(int argc, char const *argv[]){    string s;    getline(cin,s);    map<string,int> alpha;    string tmp="";    for(int i=0;i<s.length();i++){        if(isalnum(s[i])){//判断是否是a-z,A-Z,0-9            //转为小写            s[i]=tolower(s[i]);            tmp+=s[i];        }        else{            if(tmp!="")                alpha[tmp]++;            tmp="";        }    }    if(tmp!="")        alpha[tmp]++;    int max=-1;//最大个数    string maxs;//个数最大的字母    for(auto iter=alpha.begin();iter!=alpha.end();iter++){        if(iter->second>max){            max=iter->second;            maxs=iter->first;        }        else if(iter->second==max){//个数相同            if(iter->first<maxs){//按字母表排序                maxs=iter->first;            }        }    }    cout<<maxs<<" "<<max<<endl;    return 0;}