c++编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。
时间: 2024-05-09 20:18:08 浏览: 13
这是一个很有趣的问题呢!以下是根据您的要求编写的程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1000 // 最大字符串长度
int main() {
char str[MAX_SIZE];
printf("请输入一个字符串:\n");
fgets(str, MAX_SIZE, stdin);
int count[256] = {0}; // 用数组来统计每个字符出现的次数,ASCII码有256个字符
// 统计每个字符出现的次数
for (int i = 0; i < strlen(str); i++) {
count[(int)str[i]]++;
}
int maxFreq = 0; // 记录出现次数最多的字符出现次数
for (int i = 0; i < 256; i++) {
if (count[i] > maxFreq) {
maxFreq = count[i]; // 更新出现次数最多的字符出现次数
}
}
// 按照出现次数从高到低排序,并根据输入顺序输出相同频率的字符
for (int freq = maxFreq; freq > 0; freq--) {
for (int i = 0; i < strlen(str); i++) {
if (count[(int)str[i]] == freq) {
printf("%c ", str[i]);
count[(int)str[i]] = -1; // 标记该字符已经输出过
}
}
}
return 0;
}
```
希望这个程序能够满足您的需求哦!