从文件中获取单词并将它们与另一个文件中的文本进行比较
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
以将文件指针放回开头,或者您需要以不同的方式解决问题。
例如,通常将两个文件的整体读入内存中的数据结构,然后从该数据结构中匹配它们。
我想找出某些特定单词的出现次数
在 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
以将文件指针放回开头,或者您需要以不同的方式解决问题。
例如,通常将两个文件的整体读入内存中的数据结构,然后从该数据结构中匹配它们。