在开始前需要了解子串和真子串的区别
abc 的 子串有 a ,b,c,ab,bc,ac,abc , 而真子串是不包括自身的其他子串
BF算法
目的 : 在主串中 ,找到子串开始的位置
如 主串 aaaabaa 子串 ab 就应该返回下标3
BF算法的思想是 :1让主串和子串一一比较 ,主串下标记作i 子串下标记作j 让i++ j++
2 如果j 走出了范围就说明 找到了子串 , 返回 i -j (因为要返回起始位置 ,主串走过的长度就是i)
3 如果 i 和 j 不相等,就让 j =0 , i 回退到这一趟 开始下标的下一个位置 (i-j+1),如果这里的 i 不回退的话,有可能跳过子串 。
如 主串是 aaabaaaa 子串是 aab , 应该返回的是 1 下标 ,但 如果没有回退 i 的话 , 开始比较 到 2 号下标不相等 i 又从 2下标开始比较 ,跳过了字串 。所以需要回退i 。
以上就是 BF算法的主要思想 , 下来实现一下 代码 。
int BF_Search(const char *str, const char *sub, int pos)//pos代表主串开始查找的下标位置
{
assert(str!=NULL && sub!=NULL);
if(pos<0 || pos>=(int)strlen(str))
{
//retu