C++ KMP算法实现字符串搜索

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
#include<stdio.h>
#define maxsize 100
typedef struct string
{
    int  n;
    char s[maxsize];
}string;
int get_nextval(string &T,int nextval[])
{
    int i=1;
    int j=0;
    nextval[1]=0;
    while(i<T.n)
    {
        if(j==0||T.s[i]==T.s[j])
        {
            ++i;
            ++j;
            nextval[i]=j;
        }
        else
            j=nextval[j];
    }
    return 0;
}
int Index(string &S,string &T,int pos)
{
    int i=pos;
    int j=1;
    int nextval[255];
    get_nextval(T,nextval);
    while(i<=S.n&&j<=T.n)
    {
        if(j==0||S.s[i]==T.s[j])
        {
            ++i;
            ++j;
        }
        else
            j=nextval[j];
    }
    if(j>T.n)
        return i-T.n;
    else
        return 0;
}
int main()
{
    string S,T;
    char c;
    int i=1,m;
    printf("请输入原字符串S,以#号结尾");
    while((c=getchar())!='#')
    {
        S.s[i]=c;
        i++;
    }
    S.n=i-1;
    printf("请输入检测字符串T,以#号结尾");
    fflush(stdin);
    i=1;
    while((c=getchar())!='#')
    {
        T.s[i]=c;
        i++;
    }
    T.n=i-1;
    m=Index(S,T,1);
    printf("检测结果为:");
    if(m==0)
        printf("找不到字符串!");
    else
        printf("找到字符串,从S的第%d个位置开始\n",m);
    return 0;
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:纯C语言实现的一个简单的web服务器

下一篇: C++字符串操作集合