适用于短输入,无法长输入。怎么解决?

时间:2010-04-27 20:37:52

标签: c string search cstring runtime-error

我有这个程序在字符串中找到子字符串。它适用于小输入。但是长期投入失败了。这是该计划:

//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

哪个是完全错误的。任何专家都能找到我的解决方案吗?

P.S:这有点像重新发明轮子,因为strstr()具有此功能。但我正在尝试以非库的方式来做这件事。

3 个答案:

答案 0 :(得分:2)

您需要使用strncmp而不是strcmp,并将比较长度设置为strlen(search)。或者你可以用'\0'来终止temp。

答案 1 :(得分:2)

好吧,首先,“temp”在第二种情况下不会以空值终止。这就是你的第一个案例起作用的原因;如果你搜索“好”,它就行不通了。

答案 2 :(得分:1)

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