KMP算法

来源:互联网 发布:sql where in 编辑:程序博客网 时间:2024/05/21 19:43
//-------------------------------KMP算法 /*    字串匹配算法*/#include <stdio.h>#include <string.h>int next[100];char a[100];char b[100];void GetNext(int bLen){    int x,y,k,j;    j = 0;    k = -1;    next[0] = -1;    while(j<bLen)    {        if(k==-1||b[j]==b[k])        {            j++;            k++;            next[j] = k;        }        else        {            k = next[k];        }    }}int KMP(int aLen,int bLen){    int i,j;    i = j = 0;    while(i<aLen && j<bLen)    {        if(j==-1||a[i]==b[j])        {            i++;            j++;        }        else        {            j = next[j];        }    }    if(j>=bLen)    {        return(i-bLen+1);    }    else    {        return -1;    }}int main(){    printf("请输入主串:\n");    scanf("%s",a);    printf("请输入子串:\n");    scanf("%s",b);    int aLen,bLen;    aLen = strlen(a);    bLen = strlen(b);    GetNext(bLen);    int i = KMP(aLen,bLen);    printf("%d\n",i);    return 0;}