Online Compiler C

#include <stdio.h> int have_letter(int s[]) { int flag = 0; for (int i = 0; i < 26; i++) { if (s[i] > 0) { flag = 1; } } return flag; } void result(char s[]) { int i = 0; int counter[26] = {0}; int number; while (s[i] != '\0') { if (s[i] >= 'A' && s[i] <= 'Z') { number = s[i] - 'A'; counter[number]++; } else if (s[i] >= 'a' && s[i] <= 'z') { number = s[i] - 'a'; counter[number]++; } i++; } int flag = have_letter(counter); if (!flag) { printf("-"); } else { int max = 0; for (int j = 0; j < 26; j++) { if (counter[max] < counter[j]) { max = j; } } printf("%c", max + 'a'); } } int main() { char a[1001]; scanf("%[^\n]", a); result(a); return 0; }
这段代码的功能是:读取一行字符串,统计其中每个英文字母出现的次数,然后输出出现次数最多的字母(小写形式)。如果没有字母,则输出短横线 `-`。

代码中有一个潜在问题:当有多个字母出现次数相同时,程序只会输出第一个遇到的最大值对应的字母,但题目可能要求输出所有出现次数最多的字母。

- 在 `result` 函数中,找到最大次数后,需要检查是否还有其他字母也达到了这个最大次数,并一起输出。
- 可以考虑在找到最大值后,再遍历一次数组,将所有次数等于最大值的字母都输出。