检查string是否是另一个字符串的子字符串

时间:2010-02-19 04:32:07

标签: c string

如何在不使用substr函数的情况下检查字符串是否是C中另一个字符串的子字符串?

3 个答案:

答案 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();
}