PAT B1042 字符统计(C++)

PAT甲级目录 | PAT乙级目录

题目描述

B1042 字符统计

解题思路

利用一个 hash 数组记录每个英文字母出现的次数,最后按顺序遍历,即保证了同频率下取字母序较小的结果。

易错点

  • 出现次数相同的字母,取字母序较小的那个

也许陌生的知识点

  • cctype 头文件包含一系列处理单个字符的函数
    • isalpha(temp)
      • 判断该字符是否为字母,如是返回 true
    • isupper(temp)
      • 判断字符是否为大写
    • islower(temp)
      • 判断字符是否为小写
    • y = tolower(x)
      • 将大写字母转换为小写字母
    • y = toupper(x)
      • 将小写字母转换为大写字母

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
#include <cctype>
int main(){
int max_cnt = -1, count[256] = {0};
char temp, ans;
while(scanf("%c", &temp) != EOF){
if(isupper(temp)) temp = tolower(temp);
if(isalpha(temp)) count[(int)temp]++;
}
for(int i = 0; i < 256; i++){
if(max_cnt < count[i]){
max_cnt = count[i];
ans = (char)i;
}
}
printf("%c %d\n", ans, max_cnt);
return 0;
}