从文件中获取单词并将它们与另一个文件中的文本进行比较

Getting words from the files and comparing them with the text in another file

我想找出某些特定单词的出现次数 在 file2 中为;
(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 以将文件指针放回开头,或者您需要以不同的方式解决问题。

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