如何在不使用substr函数的情况下检查字符串是否是C中另一个字符串的子字符串?
答案 0 :(得分:4)
您可以使用滚动哈希方法(Rabin-Karp),或实现KMP,这有点像状态机。
通常,在搜索多个目标字符串时会使用Rabin-Karp,因为它需要的第二个检查(实际的相等而不仅仅是哈希相等)非常值得只检查源字符串一次。在你的情况下,要么会做得很好。
还有一个更天真的解决方案是O(n ^ 2)并且需要在源字符串中的每个位置检查目标字符串。
答案 1 :(得分:3)
请勿使用substr
...使用strstr
/ strnstr
!
说真的,除非事情完全相同,否则没有其他事情会如此快。你为什么不想要那个?
编辑:是的,有一些算法具有更好的渐近性能。对于单个字符串的类似文本的搜索,我会惊讶地看到任何东西都超过了标准库。
答案 2 :(得分:0)
void main()
{
char str[80],search[10];
int count1=0,count2=0,i,j,flag;
puts("Enter a string:");
gets(str);
puts("Enter search substring:");
gets(search);
//determines the src length
while (str[count1]!='\0')
count1++;
//determines the key length
while (search[count2]!='\0')
count2++;
for(i=0;i<=count1-count2;i++)
{
for(j=i;j<i+count2;j++)
{
flag=1;
if (str[j]!=search[j-i])
{
flag=0;
break;
}
}
if (flag==1)
break;
}
if (flag==1)
puts("SEARCH SUCCESSFUL!");
else
puts("SEARCH UNSUCCESSFUL!");
getch();
}