C语言—统计一串字符中各个字符的出现频率
•
算法结构
文章目录
- 1 目标效果
- 2 程序实现
-
- 2.1 程序代码
- 2.2 实现思路
1 目标效果
编写程序,能够统计某一段字符串中各个字符出现的次数。比如输入一串“abcade”,能够统计出其中各个字母的出现频率。
2 程序实现
2.1 程序代码
#include
#include
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]);
}
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
#include
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]);
}
}
}
输入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次
经过测试,该程序统计长度为20的字符串中每个字符出现的频率耗费的大概是4ms

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/23bb06b393.html
