思路

  1. 得到字符串
  2. 将字符串存到对应ascii码所在的数组的位置,并统计个数
  3. 将Ascii码和个数分别存到创建结构体的对应位置
  4. 将结构体内的字符根据个数和Ascii进行排序
  5. 输出字符

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;
}