如何计算字符串列表的出现次数并将其输出到新文件?

时间:2014-04-18 20:53:08

标签: c arrays string pointers io

我收到了三个'.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;    

}

2 个答案:

答案 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的是否都有嵌入的换行符。