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
网友评论