标题:C语言菜鸟求助怎样逐一统计字符
只看楼主
曾庆
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-1
结帖率:0
已结贴  问题点数:20 回复次数:9 
C语言菜鸟求助怎样逐一统计字符
随意输入ASCII字符,统计输入的字符总数,有哪些字符输入了,每个字符的输入次数,每个字符占总输入字符数的比例,把字符按比例大小从大到小排序。
搜索更多相关主题的帖子: C语言 统计 字符 输入 从大到小 
2017-11-01 08:27
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:10 
ASCII太多了,没有范围要求?带不带扩展,以什么做输入结束

[此贴子已经被作者于2017-11-1 09:42编辑过]

2017-11-01 09:34
曾庆
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-1
得分:0 
输入的字符有:aaasssdddas#%*()/
输入的字符总数:17
输入字符种类有:asd#%*()/
a输入的次数:3
a占总字符数:17%
......这个形式
2017-11-01 10:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
#include <stdio.h>
main()
{
    struct {char c; int t;} cp[256]={0}, tmp;
    int i, j, count;
    char c;
    for (count=0; (c=getchar())!='\n'; ++count)
        ++cp[c].t;
    for (i=0; i<256; ++i)
        cp[i].c = i;
    for (i=0; i<255; ++i)
    {
        for (j=i+1; j<256; ++j)
        {
            if (cp[i].t < cp[j].t)
            {
                tmp = cp[i];
                cp[i] = cp[j];
                cp[j] = tmp;
            }
        }
    }
    printf("字符总数: %d\n", count);
    printf("字符\t次数\t占比\n");
    for (i=0; i<256; ++i)
        if (cp[i].t > 0)
            printf("%c\t%d\t%f\n", cp[i].c, cp[i].t, (float)cp[i].t/count);
}

2017-11-01 10:51
曾庆
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-1
得分:0 
有没有注释啊。小弟看不懂啊
2017-11-01 14:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用曾庆在2017-11-1 14:48:13的发言:

有没有注释啊。小弟看不懂啊

4个for:
1、for 输入字符并累计字符次数
2、for 记存字符
3、for 按字符次数排序(降序)
4、for 输出字符统计结果


2017-11-01 15:33
曾庆
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-1
得分:0 
那如果我想排序呢。该怎么打
2017-11-01 15:34
曾庆
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-1
得分:0 
就是把输入的按ascll码排顺序
2017-11-01 15:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用曾庆在2017-11-1 15:38:15的发言:

就是把输入的按ascll码排顺序

#include <stdio.h>
main()
{
    char cp[256]={0};
    int i, j, count;
    char c;
    for (count=0; (c=getchar())!='\n'; ++count)
        ++cp[c];
    printf("字符总数: %d\n", count);
    printf("字符\t次数\t占比\n");
    for (i=0; i<256; ++i)
        if (cp[i] > 0)
            printf("%c\t%d\t%f\n", i, cp[i], (float)cp[i]/count);
}
2017-11-01 16:15
曾庆
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-1
得分:0 
好的万分感谢。谢谢谢谢谢谢谢谢
2017-11-01 17:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482005-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.603539 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved