【程序】
#include <stdio.h> #include <string.h> int table[27]; //前26个英文字母,最后一个空格 void ShifTable(char p[])//生成移动表 { int i; for(i=0;i<27;i++) table[i]=strlen(p); for(i=0;i<strlen(p)-1;i++) //最后一个字符不需要建立 table[p[i]-'a']=strlen(p)-i-1; } int Table(char t) //返回字符对应的移动距离 { if(t!=' ') return table[t-'a']; else return table[26]; } int Horspool(char t[],char p[]) //Horspool算法 { int i,k; ShifTable(p);//建表 i=strlen(p)-1; while(i<strlen(t)) { k=0; while(k<strlen(p)&&p[strlen(p)-1-k]==t[i-k]) k++; if(k==strlen(p)) return i-strlen(p)+1; else i=i+Table(t[i]); } return -1; } int main() { int start; char t[100],p[20]; printf("输入母串:"); gets(t); printf("输入子串:"); gets(p); start=Horspool(t,p); if(start>=0) printf("起始位置:%d\n",start+1); else printf("没有此串!\n"); }