gpt4 book ai didi

c - C文件中最常见的字符

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

我正在做我的 C 编程类(class)作业,我需要在给定文件中找到最常见的字符。

我用测试文件、空文件和其他少量文本文件进行的测试效果很好(或者至少我是这么认为的),但是在最后一个长测试文件中出了点问题,错误消息是:“应该返回 ' e' (101) 用于文件 rfc791.txt。您返回了 'b' (98)"

那么我想问的是,当最常见的字母突然不应该是什么时,我的代码可能出了什么问题?

int most_common_character(char *filename) {
FILE *f;
if ((f = fopen(filename, "r")) == NULL) {
fprintf(stderr, "Not opened: %s\n", strerror(errno));
return -1;
}

char frequency[26];
int ch = fgetc(f);
if (ch == EOF) {
return 0;
}

for (ch = 0; ch < 26; ch++) {
frequency[ch] = 0;
}

while (1) {
ch = fgetc(f);
if (ch == EOF) {
break;
}
if ('a' <= ch && ch <= 'z') {
frequency[ch - 'a']++;
}
else if ('A' <= ch && ch <= 'Z') {
frequency[ch - 'A']++;
}
}
int maxCount = 0;
int maxChar = 0;
for (int i = 0; i <= 26; ++i) {
if (frequency[i] > maxCount) {
maxCount = frequency[i];
maxChar = i;
}
}
fclose(f);
return maxChar + 'a';
}

如果有人有任何提示来修复我的代码,我将不胜感激 :) 我已尝试从许多其他相关主题中搜索此问题的解决方案,但似乎没有任何效果。

最佳答案

您应该在第二个 for 循环中使用 < 运算符。因此,当您检查 frequency[i] > maxCount 时,在 frequency[26] 处它表现出未定义的行为,这意味着该索引处的值可能小于或大于比较值。

关于c - C文件中最常见的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39743770/

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