BF算法和 KMP 算法

来源:互联网 发布:兽药尼蒙尔克素淘宝网 编辑:程序博客网 时间:2024/06/11 12:01

这几天学习了神奇的字符串匹配算法,

在没学之前,按照自己的想法写出了BF算法: 

#include <stdio.h>#include <string.h>char ch[1001],p[12];int lenth_ch,lenth_p;int BF(){    int i=0,j=0,counter=0;    while(i<lenth_ch)    {        while(i<lenth_ch&&j<lenth_p)       {        if(ch[i]==p[j])        { i++;j++; }        else        { i=i-j+1;j=0;}       }      if(j==lenth_p)       counter++;      i=i-j+1;j=0;g    }    return counter;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%s",p);        scanf("%s",ch);        lenth_p=strlen(p);        lenth_ch=strlen(ch);       printf("%d\n",BF());    }    return 0;}

学了数据结构之后:

#include <stdio.h>#include <string.h>#define M 200void getnext(char t[],int length,int *next){    int i=0,j=-1;    next[0]=-1;    while(i<length-1)    {        if(j==-1||t[i]==t[j])        {            i++;            j++;            if(t[i]!=t[j])                next[i]=j;            else                next[i]=next[j];        }        else            j=next[j];    }}int KMP(char *s,char *t,int pos){    int i=pos,j=0,next[M];    getnext(t,strlen(t),next);    while(i<(int)strlen(s) && j<(int)strlen(t))    {        if(j==-1||s[i]==t[j])        {            i++;            j++;        }        else         {             j=next[j];         }    }    if(j==(int)strlen(t))        return i-j;//返回开始匹配到的主串位置    else        return -1;}int main(){    char a[M],b[M];    while(~scanf("%s%s",a,b))    {         if(KMP(a,b,0)!==-1)            printf("found\n");         else           printf("not found\n");          return 0;}



原创粉丝点击