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

如何为包含字母的文本文件创建C语言数组形式的字符频率统计表

C语言文本字符频率统计实现方案

首先解答你的核心疑问:
你要的256长度unsigned int数组天然就可以同时关联字符和频率:数组下标直接对应字符的ASCII整数值,数组元素的值就是该字符的出现次数。比如字符'A'的ASCII码是65,那么freq[65]里存的就是'A'的出现次数,不需要额外存储字符本身,下标和字符是一一对应的。

实现步骤

  • 第一步:定义长度为256的unsigned int数组,初始值全部置0,保证初始计数为0
  • 第二步:以只读模式打开目标文本文件,增加打开失败的异常处理
  • 第三步:循环读取文件中的每一个字符,每读到一个字符,就将对应下标的数组元素自增1,直到读到文件结束符EOF
  • 第四步:统计完成后可按需遍历数组,输出非0计数的字符及其频率

完整可运行代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 定义频率统计数组,长度256对应所有ASCII字符,初始化为0
    unsigned int freq[256] = {0};
    FILE *fp = fopen("text.txt", "r");
    if (fp == NULL) {
        perror("文件打开失败");
        return EXIT_FAILURE;
    }

    int ch; // 用int存fgetc返回值,兼容EOF判断
    while ((ch = fgetc(fp)) != EOF) {
        freq[ch]++; // 直接用读到的字符值作为下标计数
    }
    fclose(fp);

    // 输出统计结果,只打印出现过的字符
    printf("字符 | ASCII码 | 出现次数\n");
    printf("------------------------\n");
    for (int i = 0; i < 256; i++) {
        if (freq[i] > 0) {
            // 不可见字符(比如换行)单独处理显示
            if (i == '\n') {
                printf("\\n   | %-7d | %u\n", i, freq[i]);
            } else if (i == '\t') {
                printf("\\t   | %-7d | %u\n", i, freq[i]);
            } else {
                printf("%c    | %-7d | %u\n", i, i, freq[i]);
            }
        }
    }
    return EXIT_SUCCESS;
}

示例运行结果

用你给出的text.txt内容AAAABBBB\nCCCCEE测试,输出如下:

字符 | ASCII码 | 出现次数

A | 65 | 4
B | 66 | 4
\n | 10 | 1
C | 67 | 4
E | 69 | 2

内容的提问来源于stack exchange,提问作者quiccode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:02