gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:45 24 4
gpt4 key购买 nike

我目前正在尝试读取文件中每个字符的计数。该文件已加密,因此它包含 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com