当前位置:   article > 正文

C语言—统计一串字符中各个字符的出现频率_统计每个字母出现个数c语言

统计每个字母出现个数c语言

1 目标效果

编写程序,能够统计某一段字符串中各个字符出现的次数。比如输入一串“abcade”,能够统计出其中各个字母的出现频率。

2 程序实现

2.1 程序代码

#include<stdio.h>
#include<string.h>

void main()
{
    char str[20];   // 输入的字符串
    int i,num[256]={0};   // 统计次数时的变量
    printf("please input string:\n");
    scanf("%s",str);
    // 统计次数
    for(i=0;i<strlen(str);i++)
        num[(int)str[i]]++;
    // 显示结果
    for(i=0;i<256;i++)
        if(num[i]!=0)
            printf("字符%c出现%d次\n",(char)i,num[i]);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.2 实现思路

这里实现思路比较巧妙,变量i用来做for循环的变量。num[]这个数组是给每一个ASIIC字符开辟的数组,通过(int)str[i]在遍历整个输入字符串str[]的同时,给每一个ASIIC码都确定了一个计次变量的存储位置。num[]++是ASIIC码对应字符出现次数自加操作。for循环的过程中num[(int)str[i]]用来记录每一个出现过的字符的次数,当统计完成后开始准备输出结果。

显示统计结果是也比较巧妙,经过第一个统计次数的for循环后,每一个出现过的字符的num[]对应位置的值都不为0,而且其索引,也就是第二个for循环中的i,恰好是其统计的字符对应的ASIIC码的值。因此在输出时(char)i是出现过的字符串,num[i]对应其出现过的次数。

为了方便理解,加上一些输出中间过程值的printf语句来观察整个程序运行的逻辑。修改后的代码如下

#include<stdio.h>
#include<string.h>

void main()
{
    char str[20];   // 输入的字符串
    int i,num[256]={0};   // 统计次数时的变量
    printf("please input string:\n");
    scanf("%s",str);
    
    // 统计各个字符出现的次数
    for(i=0;i<strlen(str);i++)
    {
        num[(int)str[i]]++;
        printf("i=%d\n",i);
        printf("str[i]=%d\n",str[i]);
        printf("num[(int)str[i]]=%d\n",num[(int)str[i]]);
    }
    
    for(i=0;i<256;i++)
    {
        if(num[i]!=0)
        {
            printf("字符%c出现%d次\n",(char)i,num[i]);
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

输入asdfasdfghjkjuhgfdsa后观察输出结果,如下

i=0   // 开始遍历输入字符串str中的第一个字符
str[i]=97   // 字母a对应的ASIIC码值
num[(int)str[i]]=1   // num中索引为97的位置加了1

i=1   // 开始遍历输入字符串str中的第一个字符
str[i]=115   // 字母s对应的ASIIC码值
num[(int)str[i]]=1   // num中索引为115的位置加了1

i=2
str[i]=100
num[(int)str[i]]=1

i=3
str[i]=102
num[(int)str[i]]=1

i=4
str[i]=97
num[(int)str[i]]=2

i=5
str[i]=115
num[(int)str[i]]=2

i=6
str[i]=100
num[(int)str[i]]=2

i=7
str[i]=102
num[(int)str[i]]=2

i=8
str[i]=103
num[(int)str[i]]=1

i=9
str[i]=104
num[(int)str[i]]=1

i=10
str[i]=106
num[(int)str[i]]=1

i=11
str[i]=107
num[(int)str[i]]=1

i=12
str[i]=106
num[(int)str[i]]=2

i=13
str[i]=117
num[(int)str[i]]=1

i=14
str[i]=104
num[(int)str[i]]=2

i=15
str[i]=103
num[(int)str[i]]=2

i=16
str[i]=102
num[(int)str[i]]=3

i=17
str[i]=100
num[(int)str[i]]=3

i=18
str[i]=115
num[(int)str[i]]=3

i=19
str[i]=97
num[(int)str[i]]=3

// 最终统计结果
字符a出现3次
字符d出现3次
字符f出现3次
字符g出现2次
字符h出现2次
字符j出现2次
字符k出现1次
字符s出现3次
字符u出现1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

经过测试,该程序统计长度为20的字符串中每个字符出现的频率耗费的大概是4ms
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/493227
推荐阅读
相关标签
  

闽ICP备14008679号