题解 | #字符统计#
字符统计
https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // 1. 得到一行字符串 // 2. 分别统计出现次数 // 3. 对出现次数进行排序 // 4. 输出 struct pair{ int cnt; char chr; }; int mycmp(const void *p1, const void *p2) { const struct pair *a = (const struct pair *)p1; const struct pair *b = (const struct pair *)p2; if(a->cnt == b->cnt) { //升序 return a->chr - b->chr; } else { //降序 return b->cnt - a->cnt; } } int main() { char input[1010] = {0}; gets(input); int low[26] = {0}; int num[10] = {0}; int len = strlen(input); for(int i = 0; i < len; ++ i) { if(islower(input[i])) { ++ low[input[i] - 'a']; } if(isdigit(input[i])) { ++ num[input[i] - '0']; } } struct pair arr[36]; for(int i = 0; i < 26; ++i) { arr[i].cnt = low[i]; arr[i].chr = 'a' + i; } for(int i = 26; i < 36; ++ i) { arr[i].cnt = num[i-26]; arr[i].chr = i - 26 + '0'; } qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(arr[0]), mycmp); for(int i = 0; i < 36; ++ i) { if(arr[i].cnt) { putchar(arr[i].chr); } } return 0; }