《数据结构(C语言版)》上给出了两种模式匹配算法,BF算法和KMP算法。
存在一个主串S和一个模式T,要在主串S中查找与模式T相匹配的子串。
BF算法
操作步骤:
1. 分别利用计数指针i
和 j
指示主串和模式T中当前正待比较的字符位置, i
初值为 pos
,j
初值为 1
;
如果两个串均未比较到串 尾,即i 和j 均分别小于等于S和T的长度时,则循环执行以下操作:
·S.ch[i]
和T.ch[j]
比较,若相等,则i
和j
分别指向串中的下个位置,继续比较后续字符;
· 若不等,指针后退重新开始匹配,从主串的下一个字符(i = i - j+2
)起再重新和模式的第一个字符(j = 1
)比较;如果
j >T.length
,说明匹配成功,返回和模式T中第一个字符相等的字符在主串S中的序号(i - T.length
);否则不成功,返回 0。
int index_BF(SqString s,SqString t,