题目描述:
7-2 找出一个字符串中出现次数最多的一个字符
分数 15
入门
全屏浏览题目
切换布局
作者 陈英
单位 南昌航空大学
找出一个字符串中出现次数最多的一个字符。
输入格式:
给出一个字符串,字符串的长度不大于10^6,不区分大小写, 字符串中可能包含'A'-'Z','a'-'z',' '字符。
输出格式:
分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用一个空格分隔,如果有字符出现次数相同的输出较小的字符。行末尾无多余空格和换行
输入样例:
abcdefghijklmnopqrstuvwxyzA
输出样例:
a 2
思路:
- 首先,定义了一个整数数组
a
,长度为20000,所有元素初始化为0。这个数组用于存储每个字母出现的次数。 - 然后,定义了一个字符数组
s
,长度为1000000,用于存储输入的字符串。 - 使用
gets(s)
函数从标准输入读取字符串。 - 计算字符串
s
的长度,并存储在变量len
中。 - 遍历字符串
s
中的每个字符。如果字符是字母(由isalpha()
函数判断),则将其转换为整数,并根据其大小将其在数组a
中的计数增加1。这是因为在ASCII编码中,小写字母和大写字母在整数值上是不同的。例如,'a' 的整数值是97,'A' 的整数值是65。通过这种方式,可以跟踪每个字母的出现次数。 - 在遍历结束后,再次遍历数组
a
,找出出现次数最多的字母。这里,我们假设ASCII值在97到122之间的字母(即小写字母a到z)出现次数最多。如果找到一个出现次数比当前最大值还多的字母,就更新最大值。 - 最后,使用
printf()
函数输出出现次数最多的字母及其出现次数。
代码:
#include <ctype.h>
#include<stdio.h>
#include<string.h>
int main() {
int a[20000] = { 0 };
char s[1000000];
gets(s);
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (isalpha(s[i])) {
int b = (int)s[i];
if(b<97) a[b+32]++;
else a[b]++;
}
else continue;
}
int max = 0;
for (int i = 97; i < 123; i++) {
if (a[i] > a[max]) max = i;
}
char c = (char)max;
printf("%c %d", c, a[max]);
return 0;
}
运行截图: