模式匹配最基本的思想就是源字符串的每个字符和子串的每个字符进行比较,
其实现方法如下:
int Index(char* S, char* T, int slen,int tlen,int pos)
{
int i=pos,j=0;
while(i<slen && j<tlen)
{
if (*(S+i) ==*(T+j))
{
i++;
j++;
}
else
{
i = i - j + 2;
j = 1;
}
}
if (j == tlen)
{
return i-tlen;
}sdfsfdpoj.rerrjije
else
return -1;
}
还有一种方法:KMP方法。
它是通过计算next的值记性移动,所以比上一种方法快速。
j=0 ,next[j] = -1;
j>0时,若0<k<j,存在'p0p1……pk' ='pj-k……pj-1'
next[j] = Max(k);否则,next[j] = 0.
next的计算值是j所指的字符的前面若干个字符串的匹配,
如果前面n个字符中的第1个和第n个相等,则next[j] 取1,
如果第1,2个字符和第n-1,n个字符相等,怎next[j]取2,
依次类推……
例如:string s = “ababcabcacbab”
j=0,next[j] = -1;
j =1,next[j]=0;
j=2,k取1,则比较s[0]和s[1],a!=b,next[j]=0;
j=3,k取1,s[0]和s[2]比较,a = a,
k取2,s[0]s[1]和s[1]s[2]比较 ab!=ba
k的最大取值是1,next[j] = 1;
以此类推……