c++编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。
时间: 2024-05-15 07:14:48 浏览: 55
C语言程序设计-输入一个字符串,过滤此串,只保留串中的字母字符,并统计新生成串中包含的字母个数;
5星 · 资源好评率100%
好的,这个问题属于编程问题,我可以回答。以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CHARS 128
typedef struct {
char c;
int freq;
int order;
} CharFreq;
int compare(const void* a, const void* b) {
CharFreq* cf1 = (CharFreq*) a;
CharFreq* cf2 = (CharFreq*) b;
if (cf1->freq != cf2->freq) {
return cf2->freq - cf1->freq;
} else {
return cf1->order - cf2->order;
}
}
int main() {
char str[1000];
printf("请输入一个字符串:\n");
fgets(str, sizeof(str), stdin);
int len = strlen(str);
CharFreq freqs[MAX_CHARS];
int num_chars = 0;
for (int i = 0; i < len; i++) {
char c = str[i];
if (c == '\n') {
break;
}
int found = 0;
for (int j = 0; j < num_chars; j++) {
if (freqs[j].c == c) {
freqs[j].freq++;
found = 1;
break;
}
}
if (!found) {
freqs[num_chars].c = c;
freqs[num_chars].freq = 1;
freqs[num_chars].order = num_chars;
num_chars++;
}
}
qsort(freqs, num_chars, sizeof(CharFreq), compare);
printf("出现过的所有字符按频率高低排序的结果如下:\n");
for (int i = 0; i < num_chars; i++) {
printf("%c 出现次数:%d\n", freqs[i].c, freqs[i].freq);
}
return 0;
}
```
如果您有任何问题,请随时问我。
阅读全文