字符统计2
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
输入
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
输出
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字
符)。
示例输入
I am a student
a good programming problem
ABCD abcd ABCD abcd
示例输出
a 2
o 4
A 2
本题思路:先将输入的句子中字母字符记录到数组a中(哈希),再找出数组a中最大的数并记录下标,若有与最大数相等的输出ASCLL码小的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[110];//记录英文句子
int a[55];
int len;
int i,j,w;
int ma;
while(gets(str))
{
ma=0;
memset(a,0,sizeof(a));
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')//‘A’到‘Z’对应a[0]到a[25]
{
w=str[i]-'A';
a[w]++;
}
if(str[i]>='a'&&str[i]<='z')//‘a’到‘z’对应a[26]到a[51]
{
w=str[i]-'a'+26;
a[w]++;
}
}
for(i=0;i<52;i++)
{
if(a[i]>ma)//若a[i]的数值大于ma的数值,ma=a[i],记录下标
{
ma=a[i];
j=i;
}
if(a[i]==ma)//若a[i]的数值与ma的数值相等,记录小的下标
{
if(i<j)
j=i;
}
}
if(j>=26)//若下标比25大则输出小写字母,否则输出大写字母
printf("%c %d\n",'a'+j-26,ma);
else
printf("%c %d\n",'A'+j,ma);
}
return 0;
}