c语言输入一个可能含空格的字符串(其长度不超过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-0 I-0 J-0 K-0 L-0 M-0 N-0 O-0 P-0 Q-0 R-0 S-0 T-0 Y-0 Z-0
时间: 2023-06-25 11:07:55 浏览: 287
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX_LEN 81
int main() {
char str[MAX_LEN];
int freq[26] = {0}; // 存储每个字母出现的次数,下标对应字母表顺序
fgets(str, MAX_LEN, stdin);
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (isalpha(str[i])) { // 判断是否为字母
freq[toupper(str[i]) - 'A']++; // 统计字母出现的次数
}
}
// 冒泡排序,按字母出现的次数从高到低排序
for (int i = 0; i < 25; i++) {
for (int j = 0; j < 25 - i; j++) {
if (freq[j] < freq[j+1] || (freq[j] == freq[j+1] && j > j+1)) {
int temp = freq[j];
freq[j] = freq[j+1];
freq[j+1] = temp;
}
}
}
// 输出结果
for (int i = 0; i < 26; i++) {
if (freq[i] != 0) {
printf("%c-%d ", 'A'+i, freq[i]);
} else {
printf("%c-%d ", 'A'+i, 0);
}
}
return 0;
}
```
阅读全文