Horspool(字符串匹配)算法实现 c语言

本文深入探讨了Horspool字符串搜索算法的实现细节,通过具体的C语言代码示例,展示了如何进行模式匹配预处理和搜索过程。算法首先计算bad character shift表,然后使用该表在文本中快速跳过字符,直至找到所有模式出现的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include <string.h>

#define ASIZE 256

void preBmBc(char *x, int m, int bmBc[]) {
   int i;
 
   for (i = 0; i < ASIZE; ++i)
      bmBc[i] = m;
   for (i = 0; i < m - 1; ++i)
      bmBc[x[i]] = m - i - 1;
}

void HORSPOOL(char *x, int m, char *y, int n) {
   int j, bmBc[ASIZE];
   char c;

   /* Preprocessing */
   preBmBc(x, m, bmBc);

   /* Searching */
   j = 0;
   while (j <= n - m) {
      c = y[j + m - 1];
      if (x[m - 1] == c && memcmp(x, y + j, m - 1) == 0)
         printf("%.*s", m, y +j);
      j += bmBc[c];
   }
   printf("\n");
}



int main()
{
    char *pattern = "hello";
    char *buf = "hehe  hello world";
    HORSPOOL(pattern, strlen(pattern), buf, strlen(buf));
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值