3、m>7.usingnamespacestd;8.9.//宏定義10.#defineTRUE111.#defineFALSE012.#defineOK113.#defineERROR014.15.#defineMAXSTRLEN10016.17.typedefcharSString[MAXSTRLEN+1];18./************************************************************************/19./*20.返回子串T在主串S中第pos位置之后的位置,若不
4、存在,返回021.*/22./************************************************************************/23.intBFindex(SStringS,SStringT,intpos)24.{25.if(pos<1
5、
6、pos>S[0])exit(ERROR);26.inti=pos,j=1;27.while(i<=S[0]&&j<=T[0])28.{29.if(S[i]==T[j])30.{31.++i;++j;32.}else{33.i=i-j+2;
7、34.j=1;35.}36.}37.if(j>T[0])returni-T[0];38.returnERROR;39.}40.41.42.本文由西安白癜風(fēng)??漆t(yī)院http://www.xapfb120.com/收集,轉(zhuǎn)載請注明出處本文由西安白癜風(fēng)??漆t(yī)院http://www.xapfb120.com/收集,轉(zhuǎn)載請注明出處43.voidmain(){44.SStringS={13,'a','b','a','b','c','a','b','c','a','c','b','a','b'};45.SStringT={5,'a',
8、'b','c','a','c'};46.intpos;47.pos=BFindex(S,T,1);48.cout<<"Pos:"<9、ww.xapfb120.com/收集,轉(zhuǎn)載請注明出處需要討論兩個問題:①如何由當(dāng)前部分匹配結(jié)果確定模式向右滑動的新比較起點k?②模式應(yīng)該向右滑多遠才是高效率的?現(xiàn)在討論一般情況:假設(shè)主串:s:?s(1)s(2)s(3)……s(n)?;模式串:p:?p(1)p(2)p(3)…..p(m)?現(xiàn)在我們假設(shè)主串第i個字符與模式串的第j(j<=m)個字符?失配?后,主串第i個字符與模式串的第k(k10、..P(j-1)’=’S(i-j+1)……S(i-1)’從而推導(dǎo)出k到j(luò)-1位的“部分匹配”:即P的j-1~j-k=S前i-1~i-(k-1))位‘P(j-k+1)…..P(j-1)’=’S(i-k+1)S(i-k+2)……S(i-1)’由于s(i)≠p(j),接下來s(i)將與p(k)繼續(xù)比較,則模式串中的前(k-