KMP算法(三)

来源:互联网 发布:js不等于比较大小 编辑:程序博客网 时间:2024/06/05 00:07
针对之前的两篇博文,写的KMP的C代码实现:
#include <stdio.h>#include <string.h>int GetNext(char src[],int j){int i=0;if(j==0){return -1;}i=GetNext(src,(j-1));if(src[(i+1)]==src[j]){return (i+1);}else{while((src[i+1]!=src[j])&&(i>0||i==0)){i=GetNext(src,i);if(src[i+1]==src[j]){return (i+1);}}return -1;}}int kmp(char s[],char t[],int next[]){      int i,j;      i=j=0;  len_s=strlen(s);len_t=strlen(t);while(i<len_s&&j<len_t){if(s[i]==t[j]){i++;j++;}else{if(j!=0){  j=next[j]+1;}else{i++;j=0;}}}if(j==len_t)return i-len_t;elsereturn -1;}   int main(){      char source[100]={0};char target[10]={0};     int  next[50]={-2};     int  i=0;    printf("please input string source: \n");      scanf("%s",source);  printf("input string : %s\n",source);           printf("please input string target: \n");      scanf("%s",target);  printf("input string : %s\n",target); for(i=0;i<strlen(target);i++)    {      next[i]=GetNext(target,i);      printf("next[%d]= %d\n",i,next[i]);    }        printf("index : %d\n",kmp( source,target,next));  }  


编译与执行:


0 0