0001 int match ( char* P, char* T ) { //KMP算法 0002 int* next = buildNext ( P ); //构造next表 0003 int n = ( int ) strlen ( T ), i = 0; //文本串指针 0004 int m = ( int ) strlen ( P ), j = 0; //模式串指针 0005 while ( (j < m) && (i < n) ) //自左向右逐个比对字符 0006 if ( 0 > j || T[i] == P[j] ) //若匹配,或P已移出最左侧(两个判断的次序不可交换) 0007 { i ++; j ++; } //则转到下一字符 0008 else //否则 0009 j = next[j]; //模式串右移(注意:文本串不用回退) 0010 delete [] next; //释放next表 0011 return i - j; 0012 }