找出一个字符串中出现次数最多的一个字符。
输入格式:
给出一个字符串,字符串的长度不大于10^6,不区分大小写, 字符串中可能包含'A'-'Z','a'-'z',' '字符。
输出格式:
分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用一个空格分隔,如果有字符出现次数相同的输出较小的字符。行末尾无多余空格和换行
输入样例:
abcdefghijklmnopqrstuvwxyzA
输出样例:
a 2
思路讲解:
首先先定义一个map<char,int> a, 用来记录每个字符出现的次数。
再定义一个字符c,使用cin.get(c)输入一个字符,若该字符为换行\n,则结束输入。在输入过程中,需进行判断该字符是否为字母,可以使用isalpha(c)来判断,如果是字母,就判断是否为大写字母,若是则将其变为小写。在判断完后,将其储存起来,a[c]++。
然后再定义一个map的迭代器map<char,int>::iterator it,用来遍历a。将出现次数最多字符的次数用max记录,该字符用maxc记录。
迭代器it,可以使用it->first,来获取字符,用it->second,获得字符出现的次数。
完整代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<char,int> a;
char c;
while(cin.get(c)){
if(c=='\n')break;
if(isalpha(c)){
if(isupper(c)){
c=c+32;
}
}
a[c]++;
}
map<char,int>::iterator it;
int max=0;
char maxc='a';
for(it=a.begin();it!=a.end();it++){
if(max<it->second){
max=it->second;
maxc=it->first;
}
}
cout<<maxc<<" "<<max;
}