我收到了三个'.txt'文件。
第一个是单词列表。 第二个是要搜索的文档。 第三个是一个空白文档,将我的输出写入其中。
我应该在第一个文件中取出每个单词,搜索第二个文件并将第三个文件中出现的次数打印为“wordX = numOccurences”。
我有一个很好的函数会返回wordCount,它会为第一个单词正确地返回它,但是对于所有剩余的单词我得到一个零。
我试图取消引用一切,我想我已经陷入停滞状态了。 “指针说话”有问题。
我还没有开始将单词输出到新文件,但是printf语句应该是追加模式下的print to file语句。很容易。
这是工作的wordCount函数 - 如果我只给它一个单词,就像“测试”一样,它可以工作,但如果我给它一个我要迭代的数组,它只返回0.
int countWord(char* filePath, char* word){ //Not mine. This is a working prototype function from SO, returns word count of particular word
FILE *fp;
int count = 0;
int ch, len;
if(NULL==(fp=fopen(filePath, "r")))
return -1;
len = strlen(word);
for(;;){
int i;
if(EOF==(ch=fgetc(fp))) break;
if((char)ch != *word) continue;
for(i=1;i<len;++i){
if(EOF==(ch = fgetc(fp))) goto end;
if((char)ch != word[i]){
fseek(fp, 1-i, SEEK_CUR);
goto next;
}
}
++count;
next: ;
}
end:
fclose(fp);
return count;
}
这是我的程序部分,试图在循环获取第一个文件中的所有单词时调用该函数。循环IS抓取单词,因为它打印出来,但是wordCount不接受第一个单词以外的任何内容。
int main(){
FILE *ptr_file;
char words[100];
ptr_file = fopen("searchWords.txt", "r");
if(!ptr_file)
return -1;
while( fgets(words, 100, ptr_file)!=NULL )
{
int wordCount = 0;
char key[100] = &*words;
wordCount = countWord("document.txt", words);
printf("%s = %d\n", words, wordCount);
}
fclose(ptr_file);
return 0;
}
答案 0 :(得分:1)
fgets
也会读取\n
。这就是问题所在。引用
换行符使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中。
要解决此问题,请更改
while( fgets(words, 100, ptr_file)!=NULL )
{
int len = strlen(words);
words[len-1] = '\0';
答案 1 :(得分:0)
一个直接的问题:fgets
不会从字符串中删除行尾,因此无论您传递给countWord
的是否都有嵌入的换行符。