模式匹配之BF

BF

1.BF算法

1.1算法思想

  1. 判断是否为空串

  2. 判断模式串T是否长于主串S

  3. 初始化:主串S和模式串T均从头开始,用指示器i,j分别指向S,T需要比较的字符

  4. 两串逐位比较:当S和T均没有被遍历完时,对应的字符就做比较。若值相等,则比较两者的下一位置(指示器后移i++,j++);若不等,则从S 本次比较位置的开始位置 的下一个位置(用指示器start指向)开始比较,T从头重新开始

  5. 判别:若匹配成功则记录S起始位置,不成功则返回false

1.2算法设计

bool Index_BF(SString S,SString T) 
{
    if (S.len == 0 || T.len == 0) 
    {
        return false;
    }
    if (S.len < T.len) 
    {
        return false;
    }
    int start = 0;
    int i=0, j=0;
    while (i < S.len && j < T.len) //从i退出循环是指没有匹配成功 从j退出循环是指匹配成功
    {
        if (S.ch[i] == T.ch[j])
        {
            i++;
            j++;
        }
        else 
        {
            start++;
            i = start;
            j = 0;
        }
    }
    if (j >= T.len) 
    {
        printf("在S中从start=%d位置开始匹配成功\n", start+1);
        return true;
    }
    return false;
}
posted @ 2022-10-12 12:01  骆宾王  阅读(46)  评论(0)    收藏  举报