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

C: Reading a file to keep track of each extended ASCII appearance count

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

问题

阅读完文件后,我打印数组以进行调试。令我惊讶的是,数组只计算字符 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]++;             
    }   
}