strstr 使用 c 始终返回 true 在字符串中查找单词

mag*_*iam 2 c c-strings turbo-c

再会,

所以我决定再次通过我的 C 并开始对字符串中的单词进行简单的搜索。

这是我的代码:

#include<stdio.h>
#include<conio.h>
#include<string.h>

main(){
char word[100];
char sentence[100];

clrscr();
printf("Enter a word: ");
fgets(word, 100, stdin);
getch();
printf("The word is : %s", &word);
getch();
printf("\nEnter a sentence: ");
fgets(sentence, 100, stdin);
getch();
printf("The sentence is: %s",&sentence);
getch();
if(strstr(sentence,word) == 0){
  printf("word found!");
}
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,每当我尝试使用 搜索字符串中的单词时strstr,它总是返回word found。我也尝试过使用,strcmp但这只会比较字符串的第一个实例,并在找不到匹配项时停止,因此如果您想在字符串问题中进行单词搜索,这并不是真正可取的。

我以前从未真正制作过这样的程序,实际上从未需要过。所以我可以问为什么不能正常工作,因为根据它的描述strstr应该是在一个句子中搜索一个词还是我只是误解了它。

另外,如果您对我的程序有任何意见,请随时提出,以便我意识到我的错误。

谢谢

示例:单词:狗
句子:狗在这里
应该返回真

alk*_*alk 5

这条线

if(strstr(sentence,word) == 0)
Run Code Online (Sandbox Code Playgroud)

应该

if(strstr(sentence,word) != NULL)
Run Code Online (Sandbox Code Playgroud)

strstr()返回一个指向wordin第一次出现的指针,sentence或者NULL如果没有找到该词。

详情请阅读此处


fgets()用于读入“字符串”,在“字符串”'\n'的末尾附加一个。这阻止了成功的比较。

要截断尾随,'\n'您可以这样做:

fgets(word, sizeof(word), stdin);
{
  size_t size = strlen(word);

  if (size && ('\n' == word[size-1]))
  {
    word[size-1] = '\0';
  }
}
Run Code Online (Sandbox Code Playgroud)