输入一个可能含空格的字符串(其长度不超过81),分别统计其中26个英文字母出现的次数(不区分大、小写字母),并按字母出现的次数,从高到低进行排序。若次数相同,按字母顺序排列。字母输出格式举例,例如:A-3,表示字母A出现3次,C-0表示字母C没有出现过。输入: 第一行为输入,占一行 输出: 第二行为输出,占一行。按照字母输出格式从高到低输出,各字母输出之间用一个空格字符进行分隔。 样例: 123abcAABXxwvUu+ A-3 B-2 U-2 X-2 C-1 V-1 W-1 D-0 E-0 F-0 G-0 H-01-0J-0 K-0 L-0 M-0 N-0 0-0 P-0 Q-0 R-0 -0 T-0Y-0Z-0
时间: 2023-12-06 17:04:53 浏览: 101
好的,您可以使用以下代码实现:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char str[82];
fgets(str, 82, stdin);
int count[26] = {0};
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (isalpha(str[i])) {
count[toupper(str[i]) - 'A']++;
}
}
for (int i = 0; i < 26; i++) {
for (int j = i + 1; j < 26; j++) {
if (count[i] < count[j] || (count[i] == count[j] && i > j)) {
int temp = count[i];
count[i] = count[j];
count[j] = temp;
char c = 'A' + i;
char d = 'A' + j;
char tempc = c;
c = d;
d = tempc;
}
}
}
for (int i = 0; i < 26; i++) {
if (count[i] > 0) {
printf("%c-%d ", 'A' + i, count[i]);
}
else {
printf("%c-0 ", 'A' + i);
}
}
return 0;
}
```
这个程序会让用户输入一个字符串,然后统计其中26个英文字母出现的次数,按照题目要求从高到低进行排序并输出。程序首先使用 `isalpha()` 函数判断字符串中的字符是否为英文字母,如果是,则将计数数组中相应字母的计数器加1。然后使用冒泡排序法按照题目要求对计数数组进行排序,最后按照题目要求输出每个字母的计数结果。
阅读全文