题目链接: http://acm.tju.edu.cn/toj/showp2468.html
题目大意:给定一串字符串 找到出现次数最多的字符并输出 如果有出现次数一样大的 则按字符从小到大输出;
思路:这是极其简单的一道题目 但是因为它涉及了英文26字符的处理方法 一些题目会经常用到 所以记录一下:
(1)遍历字符串的时候,如何统计每个字符的数目,因为总共只有26个字母,不妨设一个count数组,其下标表示英文字符在字母表中的顺序,出现一次,就让该下标值的count加1即可;至于怎么得到其在字母表中的顺序,(字符-'a')即可。
(2)输出的时候,因为考虑到相同大小情况下要按字母顺序输出,所以count遍历时要从i为0开始,并且!!!(不能直接输出 i+'a'),必须要转化为char 即输出char('a'+i),我就是在这儿错的。
(3)memset 头文件必须包含 cstring;字符串用char数组 得到其长度用strlen (好吧 我说的太细了- -!)
代码如下:
//toj 2468 找出字符串出现的最多次数
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char text[101];
int cas,i,k,count[26],max,len;
cin>>cas;
while(cas--)
{
memset(count,0,sizeof(count));
cin>>text;
len = strlen(text);
for(i=0;i<len;i++)
{
k = text[i]-'a'; //统计相同的字符串
count[k]++;
}
max = 0;
for(i=0;i<26;i++) //取最大值 i<26因为数组下标范围大小为26
{
if(count[i]>max)
max = count[i];
}
for(i=0;i<26;i++)
{
if(count[i]==max)
{
cout<<(char)('a'+i); //不要忘记转换为char 还原字符 不然输出的是数字
}
}
cout<<endl;
}
return 0;
}