请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。
在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。
This is a simple TEST. There ARE numbers and other symbols 1&2&3...........
e 7
解决是否出现过,出现了多少次(出现次数最多)这类问题,都需要用散列。本题的题意是给定一个字符串,输出26个字母中出现频率最高的字母,虽然字符串中可能有别的符号或者数字,但这些信息是无用的,我们只需要处理字符串中出现的字母。
题目要求输出小写字母,故一开始统计时就将大写字母当成小写字母来统计。
最后再用一个for循环,判断出现频率最高的字母,这里要求有并列时输出字母序小的,故循环从a到z;如果题目要求是输出字母序大的,要从z到a。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int hashtable[128]={0}; 5 char str[1010]; 6 //scanf("%s",str); 7 fgets(str,1010,stdin); 8 int len=strlen(str); 9 for(int i=0;i<len;i++){ 10 if(str[i]>=‘A‘&&str[i]<=‘Z‘){ 11 hashtable[(int)str[i]+32]++; 12 } 13 else if(str[i]>=‘a‘&&str[i]<=‘z‘){ 14 hashtable[(int)str[i]]++; 15 } 16 } 17 int max=0; 18 for(int i=97;i<123;i++){ 19 if(hashtable[i]>hashtable[max]) max=i; 20 } 21 printf("%c %d",max,hashtable[max]); 22 }
这题我一开始考虑用scanf来输入字符串,没有考虑题目给的字符串里有空格的情况,而gets现在已经不用了,故用fgets(数组名, 数组长度, stdin);
原文:https://www.cnblogs.com/taiga/p/12622799.html