0001 int match( char* P, char* T ) { //Boyer-Morre算法(简化版,只考虑Bad Character Shift) 0002 int* bc = buildBC( P ); //预处理 0003 int n = strlen( T ), i; //文本串长度、与模式串首字符的对齐位置 0004 int m = strlen( P ), j; //模式串长度、模式串当前字符位置 0005 for ( i = 0; i+m <= n; i += max(1, j - bc[ T[i+j] ]) ) { //不断右移P 0006 for ( j = m-1; (0 <= j) && (P[j] == T[i+j]); j-- ); //自右向左逐个比对 0007 if ( j < 0 ) break; //一旦完全匹配,随即收工 0008 } 0009 delete [] bc; return i; //销毁BC表,返回最终的对齐位置 0010 }