题解 | #字符统计#
字符统计
https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
解题思路
先预设一个字典,让字符就按降序方式存在字典中,这样后续输出的时候遇到出现次数相同的字符,可以比较方便的按降序输出
ASCII码中,0-9在a-z之前,所以给字典赋值前把0-9写到字典0-9位,然后10-35存入a-z
接收字符串存入数组中
将待比较数组与字典中[n][0]的字符做比较,如果相等就将[n][1]中的数字加一
使用一个循环,将字符出现的最多次提取出来
最后使用循环将字符出现的次数按照降序的方法输出即可
#include <stdio.h> int main() { char lib[36][2] = {0}; char arry[1000] = {'\0'}; char a = '0', b = 'a'; int i = 0, j = 0, num = 0; /*给字典赋值*/ for (i = 0; i < 10; i++) { //给字典赋值0-9 lib[i][0] = a; a++; } for (i = 10; i < 36; i++) { //给字典赋值a-z lib[i][0] = b; b++; } /*接收字符串*/ scanf("%s",&arry); /*统计每个字符出现的次数*/ for (i = 0; arry[i] != '\0'; i++) //i负责控制提取每一个待对比字符 { for (j = 0; j < 36; j++) //j负责提取预设lib中的字符 { if (arry[i] == lib[j][0]) //比较相同则对应数字加1 { lib[j][1]++; continue; } } } /*获取字符出现最多的次数*/ for (i = 0; i < 36; i++) { if (num < lib[i][1]) { num = lib[i][1]; continue; } } /*开始降序输出*/ while (num != 0) { for (i = 0; i < 36; i++) { if (((int)lib[i][1] == num )&& (num!=0)) { printf("%c", lib[i][0]); } } num--; } return 0; }