我有这个程序在字符串中找到子字符串。它适用于小输入。但是长期投入失败了。这是该计划:
//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()具有此功能。但我正在尝试以非库的方式来做这件事。
答案 0 :(得分:2)
您需要使用strncmp
而不是strcmp
,并将比较长度设置为strlen(search)
。或者你可以用'\0'
来终止temp。
答案 1 :(得分:2)
好吧,首先,“temp”在第二种情况下不会以空值终止。这就是你的第一个案例起作用的原因;如果你搜索“好”,它就行不通了。
答案 2 :(得分:1)
如果你想完全避免使用strcmp,你已经完成了99%的工作。只需在退出比较循环后检查j与您的令牌/搜索字符串长度,您就会知道您是否匹配。