尝试在文本文件中查找字符串时我在 C 中的函数出现问题

Problem with my function in C when trying to find a string in a text file

我正在尝试检查文本文件中是否存在字符串,我已经编写了一个将文件内容转换为字符串的函数。

char*read(FILE*f);

我写的查找String的函数是:

int find(FILE* f, char* M){
   char*chaine=read(f);

  
   if(strstr(chaine, M)!=0){
    
    printf("\n Word exists");
    return 0;
   }
   printf("\nThe word doesn't exist!!");
     return -1;
   
}

文本文件示例:

Hey I am a beginner C learner.

当我尝试使用 “他”这个词时,它说这个词存在。

strstr() 正在查找字符串 He,因为这些字符在 Hey 中找到。您可以尝试在后面的字符上使用 isalpha() 来查看它是否是单词的结尾,或者您是否在另一个单词中找到了匹配项。

这里是一个使用 isalpha()strlen() 的例子,如果找到 strstr() 的匹配项。

char *example = "Hey I am a beginner C learner.";
char *ia_example = "He, I am a beginner C learner.";

char *to_find = "He";

char *match;

if ((match = strstr(example, to_find)) && !isalpha(match[strlen(to_find)])) {
    printf("\"%s\" found in example: \"%s\"\n", to_find, example);
}

if ((match = strstr(ia_example, to_find)) && !isalpha(match[strlen(to_find)])) {
    printf("\"%s\" found in ia_example: \"%s\"\n", to_find, ia_example);
}

输出:

"He" found in ia_example: "He, I am a beginner C learner."

strlen() 用于获取您要搜索的子字符串的长度(在本例中为 He),长度为 2。所以match[strlen(to_find)](即match[2])将是匹配子串之后的字符。如果将该字符放入 isalpha() 并且它 returns 为假,那么您知道子字符串匹配后的字符不是任何字符 a-z 或 A-Z。

这将确保您不会像 "Hey" 那样在单词中间找到匹配项。请注意,此代码示例没有考虑检查子字符串是否出现在单词的末尾。所以你需要在比赛前对角色进行类似的检查,看看 isalpha()