0

我有这个程序可以在字符串中找到子字符串。它适用于小输入。但长时间输入失败。这是程序:

//Find Substring in given String
#include <stdio.h>
#include <string.h>
main()
{
  //Variable Initialization
  int i=0,j=0,k=0;
  char sentence[50],temp[50],search[50];

  //Gets Strings
  printf("Enter Sentence: ");
  fgets(sentence,50,stdin);
  printf("Enter Search: ");
  fgets(search,50,stdin);

  //Actual Work Loop
  while(sentence[i]!='\0')
  {
    k=i;j=0;
    while(sentence[k]==search[j])
    {
      temp[j]=sentence[k];
      j++;
      k++;
    }
    if(strcmp(temp,search)==0)
      break;
   i++;
  }

  //Output Printing
  printf("Found string at: %d \n",k-strlen(search));
}

效劳于:

Enter Sentence: good evening
Enter Search: evening
Found string at 6

失败:

Enter Sentence: dear god please make this work
Enter Search: make
Found string at 25

这是完全错误的。有高手能帮我解决吗?

PS:这有点像重新发明轮子,因为 strstr() 具有此功能。但我正在尝试一种非图书馆的方式。

4

3 回答 3

2

您需要使用strncmp而不是strcmp将比较长度设置为等于strlen(search)。要么,要么你可以用'\0'.

于 2010-04-27T20:42:16.593 回答
2

好吧,首先,“temp”在第二种情况下不会被空终止。这就是您的第一个案例有效的原因;如果您搜索“好”,它将无法正常工作。

于 2010-04-27T20:45:06.263 回答
1

如果您想完全避免使用 strcmp,那么您已经完成了 99% 的工作。只需在退出比较循环时根据您的令牌/搜索字符串长度检查 j,您就会知道是否有匹配项。

于 2010-04-27T20:50:57.780 回答