You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:10:31