BF算法

BF算法是模式匹配算法中最直观的算法。这里简单说一下实现代码。

首先是预定义:

#define MAXLEN 100
 
typedef struct{
        char ch[MAXLEN + 1];
        int length;
}SString;


BF算法代码:

int Index_BF(SString S, SString T, intpos)
{
        int i, j;
        i = pos;
        j = 0;
        while ((i <= (S.length - 1)) && (j <= (T.length -1)))
        {
                  if (S.ch[i] == T.ch[j])
                  {
                           i++;
                           j++;
                  }
                  else
                  {
                           i = i - j + 1;
                           j = 0;
                  }
        }
        if (j > (T.length - 1))
                  return i - T.length + 1;
        else
                  return 0;
}


先声明i,j。让i等于主串S中开始查找的位置posj等于0,让T从下标为0的元素开始对比。当两个串均未达到串尾时执行对比。如果S串中的ch[i]T串种ch[j]相等时,对比下一个,即让ij都增加1。如果不相等,让i=i-j+1(指针后退,回到开始对比的下一个元素),重新开始匹配。最后如果j大于T的长度减1的时候,返回开始对比时S首个元素的位置,无法对比成功则返回0

加入main()测试:

int main(void)
{
        SString s, t;
        int n;
        printf("输入s:");
        scanf("%s", s.ch);
        for (s.length = 0; s.ch[s.length] != '\0'; s.length++)
                  ;
        printf("输入t:");
        scanf("%s", t.ch);
        for (t.length = 0; t.ch[t.length] != '\0'; t.length++)
                  ;
        n = Index_BF(s, t, 0);
        printf("匹配位置:%d\n", n);
        return 0;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值