#include <stdio.h> #include <string.h> struct Hash { char ch; int n; } hash[36]; void init() { int i; for (i = 0; i < 26; i++) { hash[i].ch = 'a' + i; hash[i].n = 0; } for (i = 26; i < 36; i++) { hash[i].ch = '0' + i - 26; hash[i].n = 0; } } int cmp(const struct Hash* a, const struct Hash* b) { int cha = (b->n) - (a->n); if(cha !=0 ) return cha; else{ cha = (a->ch) - (b->ch); return cha; } } /* 思路就是把所有小写字母和数字放在一个hash表中,然后对其计数 */ int main() { init();//初始化hash表 char str[1000]; scanf("%s[^\n]", str); int len, i, j; len = strlen(str); for (i = 0; i < len; i++) { for (j = 0; j < 36; j++) { if (hash[j].ch == str[i]) { (hash[j].n)++; break; } } }//对每个字符计数 qsort(hash, 36, sizeof(hash[0]), cmp);//按要求进行排序 //for(i=0;i<36;i++){ // if(i%10 == 0) printf("\n"); // printf("%c%2d ||",hash[i].ch,hash[i].n); //}//调试用 i = 0; while (hash[i].n != 0) { printf("%c", hash[i].ch); i++; } return 0; }