/*************************************************************************************** --程序描述: KMP字符匹配算法 --修改时间: 2009.5.30 --修改人: 吴强 --修改原因: 从前写的代码不够规范 --编辑工具and语言 Turbo C for Windows, C语言 --输入要求: 先输入母串,然后输入待比较子串,字符串(不大于20字符)以回车表示结束 *****************************************************************************************/ #include #include int next[20]; void get_next(char *t, int next[]) { int i=0; int j=0; next[0]=0; //strlen函数返回是unsigned int类型,需要转换为int才不会有警告 while ( i< (int)strlen(t) ) { if ( j==0 || t[i]==t[j-1] ) { ++i; ++j; next[i]=j; } else { j=next[j-1]; } } } int Index_kmp(char *str, char *s) { int i=1; int j=1; while ( i<= (int)strlen(str) && j<= (int)strlen(s) ) { if ( j==0 || str[i-1]==s[j-1] ) { ++i; ++j; } else { j=next[j-1]; } } if ( j> (int)strlen(s) ) { return( i-strlen(s) ); } else { return(0); } } void main() { char str[20]; char s[20]; gets(str); gets(s); get_next(str,next); printf(" %d/n",Index_kmp(str,s)); }