我目前正在尝试读取文件中每个字符的计数.该文件已加密,因此它包含ascii值0到255.我的最终目标是返回最常出现的字符.
问题
在阅读完文件后,我打印数组以进行调试.令我惊讶的是,数组只计算字符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;
}
Run Code Online (Sandbox Code Playgroud)
根据实现,角色ch可以是签名的或未签名的.在你的测试中,它显然是签名的.使它成为int一种标准做法,因为它EOF是一个不能成为一个字符的负值.
沿着这些方向,将字符与数组索引匹配的循环无效.你需要做的就是
count[(unsigned char)ch]++;
Run Code Online (Sandbox Code Playgroud)
而不是
for(int i = 0; i < 255 ; i++){
if(i == (int) ch) {
count[i]++;
}
}
Run Code Online (Sandbox Code Playgroud)