Code:KMP

来源:互联网 发布:美国数据挖掘前景 编辑:程序博客网 时间:2024/06/10 00:08
#include <stdio.h>#include <string.h>void KMP(char S[],char T[],int next[]);void GetNext(char T[],int next[]);int main(void){char S[100],T[100];int next[100];fgets(S,100,stdin);//fgets读取回车符,在计算长度时需要减1fgets(T,100,stdin);GetNext(T,next);KMP(S,T,next);return 0;}void KMP(char S[],char T[],int next[]){int i,j,SLen,TLen;SLen = strlen(S)-1;TLen = strlen(T)-1;    i = 0; j = 0;    while(i < SLen && j<TLen)    {    if(j == -1 || S[i] == T[j])    {    i++; j++;    }    else j = next[j];    }    if(j == TLen) printf("%d\n",i-TLen+1);    else printf("000000\n");}void GetNext(char T[],int next[]){int TLen,j,k;TLen = strlen(T)-1;j = 0; k = -1;next[0] = -1;while(j < TLen){if(k == -1 || T[j] == T[k]){k++; j++;if(T[j] != T[k])next[j] = k;else next[j] = next[k];}else k = next[k];}//for(j=0;j<TLen;j++)//printf("%d ",next[j]);//printf("\n");}

原创粉丝点击