#include<stdio.h>
#include<string.h>
//unsigned short jump(char c);
int search(char*, char*);
int char_index(char,char*);
int main(void)
{
//char* pattern = "norn";
//char* pattern = "grow";
//char* pattern = "corn";
char* pattern = "door to door";
//char* target = "okas from acornorn grow";
char* target = "he went door to door";
printf("%s
",search(pattern,target)?"find":"not find");
return 0;
}
int char_index(char c, char* pattern)
{
char* tmp = pattern;
while(*tmp){
if(*tmp == c){
return tmp-pattern+1;
}
tmp++;
}
return 0;
}
/**
* Boyer-Moore fast string searching algorithm
*/
int search(char* pattern, char* target)
{
int len = strlen(pattern);
//int jump = 0;
// cur pattern , cur pattern
while(*cur){ // cur pattern , cur-1 pattern ,
// , , pattern ,
if(*cur != pattern[len-1]){ // , cur pattern
cur += (len-char_index(*cur, pattern)); // pattern , cur pattern
}else{ // pattern , cur , = pattern pattern
int i = 1;
printf("
%c",*cur);
while(1){
// pattern pattern ==
if(*(cur-i) == pattern[len-1-i]){
printf("%c",*(cur-i));
if(i++ == len-1){
printf("
");
printf("from position %d
", cur-target-(len-1));
return 1;
}
}else{
cur -= i;
break;
}
}
}
}
return 0;
}