任意输入一个字符串,求出字母出现的频数并排列输出,用c语言编写代码
时间: 2024-10-21 17:10:28 浏览: 42
ACM 垂直直方图
5星 · 资源好评率100%
在C语言中,我们可以使用数组和循环结构来计算每个字符的频率,然后利用`qsort()`函数对字符按照频率排序。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义字符及其频率数组
#define MAX_CHAR 26
typedef struct {
char ch;
int freq;
} CharCount;
// 比较函数,用于字典序排序
int compare(const void *a, const void *b) {
return ((CharCount*) a)->freq - ((CharCount*) b)->freq;
}
void count_and_sort(char* str) {
// 初始化字符频率数组
CharCount counts[MAX_CHAR] = {0};
int len = strlen(str);
// 计算字符频率
for (int i = 0; i < len; ++i) {
if (str[i] >= 'a' && str[i] <= 'z') {
counts[str[i] - 'a'].ch = str[i];
counts[str[i] - 'a'].freq++;
}
}
// 对字符按频率排序
qsort(counts, MAX_CHAR, sizeof(CharCount), compare);
// 输出结果
for (int i = 0; i < MAX_CHAR; ++i) {
if (counts[i].freq > 0) {
printf("%c appears %d times.\n", counts[i].ch, counts[i].freq);
}
}
}
int main() {
char input[100];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin); // 注意这里读取字符串需要处理换行符
// 移除fgets获取的换行符
input[strlen(input) - 1] = '\0';
count_and_sort(input);
return 0;
}
```
这个程序会接受用户输入的一个字符串,并统计其中每个小写字母的出现次数,然后按照出现次数从高到低排序输出。
阅读全文