首页 > 其他 > 详细

PAT 1042 字符统计(字符串+散列)

时间:2020-04-02 22:30:13      阅读:68      评论:0      收藏:0      [点我收藏+]

请编写程序,找出一段给定文字中出现最频繁的那个英文字母。

输入格式:

输入在一行中给出一个长度不超过 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);

PAT 1042 字符统计(字符串+散列)

原文:https://www.cnblogs.com/taiga/p/12622799.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!