#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void function(char pattern[], int length, int table[])
{
int x;
for (x=0; x<26; ++x)
table[x]=length;
for (x=0;x<length-1;++x)
table[pattern[x]-97] = length-1-x;
}
int HorspoolMathing(char text[], int tlen, char pattern[], int plen)
{
int x,k;
if(tlen < plen)
return -1;
int table[26];
function(pattern, plen, table);
x=plen-1;
while(x<=tlen-1)
{
k=0;
while(text[x-k]== pattern[plen-1-k]&& k<= plen-1)
++k;
if(k==plen)
return x-plen+1;
else
x=x+table[text[x]-97];
}
return -1;
}
int main(int argc, char *argv[])
{
while (1)
{
printf("请输入字符串1:");
char text[256];
scanf("%s", text);
printf("请输入字符串2:");
char pattern[256];
scanf("%s", pattern);
int x = HorspoolMathing(text, strlen(text), pattern, strlen(pattern));
printf("结果:\n");
printf("%s\n", text);
int i;
for (i=0;i<x;++i)
printf("%c", 32);
printf("%s\n",pattern);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
void function(char pattern[], int length, int table[])
{
int x;
for (x=0; x<26; ++x)
table[x]=length;
for (x=0;x<length-1;++x)
table[pattern[x]-97] = length-1-x;
}
int HorspoolMathing(char text[], int tlen, char pattern[], int plen)
{
int x,k;
if(tlen < plen)
return -1;
int table[26];
function(pattern, plen, table);
x=plen-1;
while(x<=tlen-1)
{
k=0;
while(text[x-k]== pattern[plen-1-k]&& k<= plen-1)
++k;
if(k==plen)
return x-plen+1;
else
x=x+table[text[x]-97];
}
return -1;
}
int main(int argc, char *argv[])
{
while (1)
{
printf("请输入字符串1:");
char text[256];
scanf("%s", text);
printf("请输入字符串2:");
char pattern[256];
scanf("%s", pattern);
int x = HorspoolMathing(text, strlen(text), pattern, strlen(pattern));
printf("结果:\n");
printf("%s\n", text);
int i;
for (i=0;i<x;++i)
printf("%c", 32);
printf("%s\n",pattern);
}
return 0;
}