文件处理 - 检查整个单词

时间:2014-11-28 08:51:51

标签: c file file-io

如何检查文件中的字符串作为整个单词?

例如,当我使用strstr()并搜索单词“google”时,它包含googleagoogle。我想从C中的文本文件中逐字逐句阅读。

我使用fgets,它从文本文件中读取整行。

我必须找到单词google的出现,而不是以前的

这是代码 我在argv中有 google 这个词[3]

            FILE *ptr;
            ptr=fopen(argv[4],"r+");
            if(ptr!=NULL)
                {
                        while(fgets(temp,521,ptr)!=NULL)
                        {

                            strlwr(temp);
                            if(strstr(temp,argv[3])!=NULL)
                                 {
                                    //printf("\nOne %s",temp);
                                    line_count++;
                                 }

                         }

            printf("L:%d",line_count);
     }//end of inner else
 }//end of else
getch();

3 个答案:

答案 0 :(得分:1)

使用

从文件中获取一行
fgets(); 

然后使用strtok()将您的行划分为以空格作为分隔符的单词。(分隔符可能是任何因为我们无法看到您的输入文件,相应地设置分隔符)

strtok()返回的每个令牌都可以用来检查字符串。 应该重复相同的步骤,直到EOF。

您对strstr()的理解是错误的。

答案 1 :(得分:1)

您可以将fscanf()与说明符"%s"一起使用。

fscanf()允许你阅读单词。分隔词是空格。

空格字符包括空格,换行符和制表符:

' '     (0x20)  space (SPC)
'\t'    (0x09)  horizontal tab (TAB)
'\n'    (0x0a)  newline (LF)
'\v'    (0x0b)  vertical tab (VT)
'\f'    (0x0c)  feed (FF)
'\r'    (0x0d)  carriage return (CR)

答案 2 :(得分:0)

请检查strstr()的{​​{3}}。

char *strstr(const char *haystack, const char *needle);

它说,

  

返回指向子字符串开头的指针,如果找不到子字符串则返回NULL。

因此,显然,在搜索google时,它不会返回agooglegoogle。究竟是什么问题?

接下来,word by word from a text file in C

  1. 使用fgets()读取完整的行,并使用空格作为分隔符来取出每个单词。使用strok() [或strtok_r(),如果扩展名提供的话

  2. 使用fscanf()