用 c 语言写以下题目:输入一个可能含空格的字符串(其长度不超过81),分别统计其中26个英文字母出现的次数(不区分大、小写字母),并按字母出现的次数,从高到低进行排序。若次数相同,按字母顺序排列。字母输出格式举例,例如:A-3,表示字母A出现3次,C-0表示字母C没有出现过。 输入:
时间: 2024-03-26 15:35:03 浏览: 148
以下是用 C 语言编写的程序:
```c
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX_LEN 81
int main() {
char str[MAX_LEN]; // 存储输入的字符串
int count[26] = {0}; // 存储每个字母出现的次数
printf("请输入字符串:");
fgets(str, MAX_LEN, stdin);
// 统计每个字母出现的次数
for (int i = 0; str[i] != '\0'; 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)) {
// 如果 i 对应的字母出现次数小于 j 对应的字母出现次数,或者出现次数相同但字母顺序 i 大于 j,则交换两个字母的出现次数
int temp = count[i];
count[i] = count[j];
count[j] = temp;
// 同时交换字母本身的位置
char temp_char = 'A' + i;
strupr(&temp_char);
str[strcspn(str, &temp_char)] = ' ';
temp_char = 'A' + j;
strupr(&temp_char);
str[strcspn(str, &temp_char)] = ' ';
}
}
}
// 输出每个字母出现的次数
for (int i = 0; i < 26; i++) {
printf("%c-%d ", 'A' + i, count[i]);
}
return 0;
}
```
程序首先读入输入的字符串,然后遍历字符串中的每个字符,统计每个字母出现的次数,并将字母转换为大写字母。程序使用一个长度为26的数组存储每个字母出现的次数,然后对这个数组进行排序,排序时如果两个字母出现次数相同,就按字母顺序排序。最后,程序输出每个字母出现的次数。
阅读全文