如何编写C语言程序统计字符串所有字符的出现频率(含函数实现)
C语言实现字符串所有字符出现频率统计(函数化版本)
需求实现思路
要统计字符串中所有字符的出现频率,核心是利用ASCII字符的范围(0-127),用一个大小为128的数组记录每个字符的出现次数:
- 初始化数组所有元素为0
- 遍历输入的字符串,每遇到一个字符,就将对应索引位置的计数加1
- 最后遍历计数数组,输出所有计数大于0的字符及其次数
进阶函数化实现
将统计逻辑封装为独立函数,让代码结构更清晰、可复用。以下是完整实现代码:
#include <stdio.h> #include <string.h> // 统计字符频率的函数:传入字符串和用于存储频率的数组 void countCharFrequency(char *str, int freq[]) { // 初始化频率数组为0 for (int i = 0; i < 128; ++i) { freq[i] = 0; } // 遍历字符串统计频率 for (int i = 0; str[i] != '\0'; ++i) { // 用字符的ASCII值作为数组索引,强转为unsigned char避免符号扩展问题 freq[(unsigned char)str[i]]++; } } int main() { char string[1000]; int freq[128]; printf("Enter a string: "); fgets(string, sizeof(string), stdin); // 去除fgets读取的换行符(如果存在) size_t len = strlen(string); if (len > 0 && string[len - 1] == '\n') { string[len - 1] = '\0'; } // 调用统计函数 countCharFrequency(string, freq); // 输出结果 printf("\nCharacter frequency:\n"); for (int i = 0; i < 128; ++i) { if (freq[i] > 0) { printf("'%c' : %d\n", (char)i, freq[i]); } } return 0; }
代码关键点说明
- 频率数组设计:
int freq[128]覆盖所有ASCII字符,每个索引对应一个字符的ASCII值,直接通过索引定位完成计数,效率极高。 - 函数封装:
countCharFrequency函数专注于统计逻辑,主函数负责输入输出,实现代码解耦,后续需要复用统计逻辑时直接调用即可。 - 换行符处理:
fgets会把用户输入的换行符\n也读入字符串,手动去除后避免统计无效的换行符频率。
示例运行
示例输入:aaaaabbccc
预期输出:
'a' : 5
'b' : 2
'c' : 3
与原有单个字符统计代码的区别
原有代码仅能统计指定单个字符的频率,而上述实现:
- 一次性统计所有字符的频率,无需用户额外指定目标字符
- 用函数封装统计逻辑,代码更易维护和复用
- 自动过滤未出现的字符,只输出有效统计结果
内容的提问来源于stack exchange,提问作者user20186273
相关产品推荐
相关产品推荐

