4.3.1 求子串位置的定位函数Index(S,T,pos)
算法4.5:
采用定长顺序存储结构,可以写出不依赖于其它串操作的匹配算法。
int Index(SString S,SString T,int pos)
{
i = pos;
j = 1;
while(i <= S[0] && j <= T[0])
{
if(S[i] = = T[j])
{
++i;++j
}
else
{
i = i - j + 2; j = 1;
}
}
if(j > T[0]) return i - T[0];
}
在算法函数过程中,分别用计数指针i 和 j 指示主串S和模式串T当前正在比较字符的位置。
算法的基本思想:从主串的第pos个位置起,和模式串的第一个字符比较,若相等则继续比较后面的字符;若不等则主串往后移继续与模式串的第一个字符开始比较起。一次类推,直到主串S中出现一个连续的和模式串T相等的子串,则匹配成功。函数返回值为与模式串匹配成功的那个主串位置,这个位置是和模式串的第一个字符比较的主串的字符位置。