Boyer-Moore

2022 ワード


#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; }