题解 | #字符统计#

字符统计

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;
}

全部评论

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务