思路
- 得到字符串
- 将字符串存到对应ascii码所在的数组的位置,并统计个数
- 将Ascii码和个数分别存到创建结构体的对应位置
- 将结构体内的字符根据个数和Ascii进行排序
- 输出字符
Answer
#include<stdio.h>
#include<string.h>
struct {
int ascii;
int num;
} data[1000], buf;
int main() {
char str[1000];
int hash[1000] = {0};
scanf("%s", str);
int len = strlen(str);
for (int i = 0; i < len; i++) {
hash[(int)str[i]]++;
}
int j = 0;
for (int i = 0; i < 1000; i++) {
if (hash[i] != 0) {
data[j].ascii = i;
data[j++].num = hash[i];
}
}
for (int i = 0; i < j; i++) {
for (int k = i + 1; k < j; k++) {
if (data[i].num < data[k].num) {
buf = data[i];
data[i] = data[k];
data[k] = buf;
}
if (data[i].num == data[k].num) {
if (data[i].ascii > data[k].ascii) {
buf = data[i];
data[i] = data[k];
data[k] = buf;
}
}
}
}
for (int i = 0; i < j; i++) {
printf("%c", data[i].ascii);
}
return 0;
}