C语言 算法"KMP" 查找字符串 ”模式匹配“

// KMP 模式匹配

// 查找字符串,匹配字符串

// 目前最好的算法之一

#include <stdio.h>

#include <string.h>

// i –> s的第 x 个字母; source_string

// j –> p的第 x 个字母;  find_string

void getNext(char *p,int *next)

{

    int j=0,k=-1;

    next[0]=-1;

    while(j<strlen(p)-1)

    {

        if(k==-1||p[j]==p[k])    //匹配的情况下,p[j]==p[k]

        {

            j++;

            k++;

            next[j]=k;

        }

        else                   //p[j]!=p[k]

            k=next[k];

    }

}

int KMPMatch(char *s,char *p)

{

    int next[100];

    int i=0,j=0;

    getNext(p,next);

    while(i<strlen(s))

    {

        if(j==-1||s[i]==p[j])

        {

            i++;

            j++;

        }

        else

        {

            j=next[j];       //消除了指针i的回溯

        }

        if(j==strlen(p))

            return i-strlen(p);

    }

    return -1;

}

int main()

{

    char s[]=”aaaa asd dd”;   //source_string

    char p[]=”asd”;           //find_string

    int ret;

    ret = KMPMatch(&s, &p); //传地址 –> 指针

    printf(“ret = %d \n”,ret);   // 4

    return 0;

}

代码下载

http://download.csdn.net/download/strugglelg/6705749

    原文作者:查找算法
    原文地址: https://blog.csdn.net/strugglelg/article/details/17269311
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞