解题思路:
定义一个结构体,其中成员定义如下, 
map[128] 表示对于acsii 码 字符出现的次数,
char word[128] 存放对应的字符

然后进行遍历的动作即可, 当map[i] 不为0 时,则对应打印word[i] 即可

备注:该解法,时间复杂度低 仅仅为O(n), 但是较为占用空间;

#include <stdio.h>
#include <ctype.h>

typedef struct abcd{
    char word[128];
    int map[128];
}map_def;

int main(void){
    char str[1025] = {0};
    
    while (scanf("%s", str) != EOF) {
        map_def struct_a = {0};
        int length = strlen(str);
        for (int i = 0; i < length; i++) {
            struct_a.map[str[i]]++; // 存放次数
            struct_a.word[str[i]] = str[i]; // 赋值对应的字符
        }

        for (int j = 0; j < 128; j++) {
            while (struct_a.map[j] != 0) {  // 判断该字符是否出现过
                printf("%c", struct_a.word[j]); // 打印对应的字符
                struct_a.map[j]--; // 对应存放次数-1
            }
        }

        printf("\n");
    }
    return 0;
}