c语言实现horspool算法

2021-04-12  本文已影响0人  一路向后

1.源码实现

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

int horspool(char *str, char *pat)
{
    char map[256];
    int l[2];
    int i, j;

    l[0] = strlen(str);
    l[1] = strlen(pat);

    for(i=0; i<256; i++)
    {
        map[i] = l[1];
    }

    for(i=0; i<l[1]-1; i++)
    {
        map[pat[i]] = l[1] - 1 - i;
    }

    i = 0;
    j = l[1]-1;

    while(i < l[0] && j != 0)
    {
        if(str[i+j] != pat[j])
        {
            i += map[str[i+j]];
            j=l[1]-1;
            continue;
        }

        j--;
    }

    if(j == 0)
    {
        return i;
    }

    return -1;
}

int main()
{
    char str[1024] = "bhallobbarberllo";
    char pat[64] = "barber";

    printf("%d\n", horspool(str, pat));

    return 0;
}

2.编译源码

$ gcc -o example examle.c -std=c89

3.运行及其结果

$ ./example
7
上一篇 下一篇

猜你喜欢

热点阅读