题解 | #字符统计#

字符统计

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

全部评论

相关推荐

点赞 评论 收藏
分享
06-16 15:04
黑龙江大学 Java
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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