加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:43:54 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #includestdio.h#define maxsize 100typedef struct string{ int n; char s[maxsize];}string;int get_nextval(string T,int nextval[]){ int i=1; in

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#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;
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读