题解 | #字符统计#
字符统计
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;
}
查看12道真题和解析