C:读取文件以跟踪每个扩展的 ASCII 出现次数

标签 c ascii

我目前正在尝试读取文件中每个字符的计数。该文件已加密,因此它包含 0 到 255 的 ascii 值。我的最终目标是返回出现次数最多的字符。

问题

阅读完文件后,我打印数组以进行调试。令我惊讶的是,数组只计算字符 0 - 127(不扩展字符)。所有超过 127 的索引都是 0。遗憾的是,该文件包含大量扩展的 ascii。我不知道可能是什么问题。我相信它会在我的比较或数据类型中。

char breakKey(FILE * cryFile, int keyLength) {
    fseek(cryFile, 0, SEEK_SET);
    unsigned int count[256] = {0};
    char ch;
    int c = 0;
    while((ch = fgetc(cryFile)) != EOF){
        for(int i = 0; i < 255 ; i++){
            if(i == (int) ch) {
                count[i]++;             
            }   
        }
    }

    for(int i = 0; i < 255 ; i++){
        printf("%d : %d \n", i, count[i]);
    }

    return 0;
}

最佳答案

根据实现,字符ch 可以是有符号的或无符号的。在您的测试中,它显然已签名。将其设为 int 是标准做法,因为 EOF 是一个负值,不能是字符。

按照这些思路,将字符与数组索引相匹配的循环是无效的。您需要做的就是

count[(unsigned char)ch]++; 

而不是

for(int i = 0; i < 255 ; i++){
    if(i == (int) ch) {
        count[i]++;             
    }   
}

关于C:读取文件以跟踪每个扩展的 ASCII 出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179917/

相关文章:

c - 为什么我的代码没有运行?

你能使 C 中的函数参数指向一个变量吗?

java - 如何找到 ascii 数组的总和?

c - 测试字符串是否仅包含字母数字

python - 将二进制字符串 (ASCII) 转换为二进制文件

c - 定义结构类型的数组

c - 对链表进行排序并返回到原始未排序的顺序

c - 如何在 Linux 中获取本地(区域)日期格式?

algorithm - 我们为什么要使用 Base64?

python - 将 Python 与一组不规则点 X、Y、Z 一起使用,以创建一个规则网格,其中每个像素都是该点的最小值