解题思路:
定义一个结构体,其中成员定义如下,
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;
}