文档介绍:/***时间:2010年8月26日7:09:57*功能:模式匹配算法代码*/#include""#include""voidkmp(int*ikmp,char*t,intt_length){intk=0;intq=0;ikmp[0]=k;for(q=1;q<t_length;q++){while(k>0&&t[k]!=t[q]){k=ikmp[k];}if(t[k]==t[q]){k=k+1;}ikmp[q]=k;}/*测试*/for(q=0;q<t_length;q++){printf("ikmp[%d]is%d\n",q,ikmp[q]);}}intkmps(char*s,char*t){ints_length=0;intt_length=0;intk=0;intq=0;int*ikmp=NULL;/*求出s_length与t_length的值*/while(s[s_length]!='\0'){s_length++;}/*测试*/printf("s_lengthis%d\n",s_length);while(t[t_length]!='\0'){t_length++;}/*测试*/printf("t_lengthis%d\n",t_length);/*求t的kmp值*/ikmp=malloc(t_length*sizeof(int));kmp(ikmp,t,t_length);/*匹配过程*/for(q=0;q<s_length;q++){while(k>0&&t[k]!=s[q]){k=ikmp[k-1];}if(t[k]==s[q]){k=k+1;}if(k==t_length){free(ikmp);return(q-t_length+1);}}free(ikmp);return-1;}main(){inti=0;char*s;/*主串*/char*t;/*匹配串*/printf("inputs:");scanf("%s",s);printf("inputt:");scanf("%s",t);/*数组下标从0开始*/i=kmps(s,t)+1;printf("%sisat%din%s",t,i,s);getch();}