C语言 从文件中获取单词并将其与另一个文件中的文本进行比较



我想找到一些特定单词的出现次数
(word1)

(word2)

(word3)对于第一个单词,一切正常,因为它找到了no。出现。但是对于另外两个单词,出现次数等于0。尽管我试着调试这个程序,我还是弄不明白为什么程序会跳过另外两个单词。因为我是初学者,也许我在两个while循环的条件上犯了一个错误,当我试图访问每个单词的时候。谁能帮助我了解我做错了什么?

感谢你的帮助

void count_words(FILE *file1, FILE *file2){
char words[20], check_words[20];
int occurrences = 0;
while (fscanf(file2, "%s", words) != EOF){
while (fscanf(file1, "%s", check_words) != EOF){
for (int i=0; i<strlen(check_words); i++){
check_words[i] = tolower(check_words[i]);
}
if (strcmp(check_words, words) == 0){
occurrences++;
}
}
printf("'%s' -> %d occurrence(s)n", words, occurrences);
occurrences = 0;
}
}

从文件中读取时,文件指针(类似于光标)移动。

第一次读取file1中的单词时,循环将读取file2中的所有单词。现在文件指针位于file2的末尾。

所以第二次从file1中读取一个单词时,当您试图从file2中读取一个单词时,您将失败,因为file2文件指针位于文件的末尾。没有更多的词了——它们都是你第一次用过的。

您需要使用fseek(file2, 0, SEEK_SET)函数倒带file2以将文件指针放回到开始位置,或者您需要以另一种方式解决问题。

例如,通常将两个文件全部读入内存中的数据结构中,然后从该数据结构中匹配它们。

相关内容

最新更新