[1525]字符统计2 (哈希)SDUT
字符统计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; }
浙公网安备 33010602011771号