示例#1
0
void callTextSearch(uchar text[], uchar pattern[]) {
	int position
	  , patn_len
	;

	patn_len = strlen((char*)pattern); /* パターンの長さをセット */

#if BF
	printf("--- B F ---\n");
	printf("%s\n",text);
	position = brute_force_search(text, pattern);
	printf("position=%d\n",position);
#endif

#if KMP
	printf("--- KMP ---\n");
	init_next(pattern);
	printNext(pattern, patn_len);
	printf("%s\n",text);
	position = kmp_search(text, pattern);
	printf("position=%d\n",position);
#endif


#if BM
	printf("--- B M ---\n");
	init_skip(pattern);
	printSkip(pattern, patn_len);
	printf("%s\n",text);
	position = bm_search(text, pattern);
	printf("position=%d\n",position);
#endif

}
示例#2
0
void extend_kmp()//char const* str)
{
  str_len = strlen(str);
  init_next();
  int index = 0;
  int min_len = ( str_len < sub_len ? str_len : sub_len);
  for( ;sub_str[index] == str[index] && index <min_len ; index++) {}
  extend[0] = index;

  int mate_len=0, pos = 0;
  for( index = 1 ; index < str_len ;  index++){  //pos 匹配到最远是的位置,index为当前点
    if(next[index - pos] + index < extend[pos] + pos){ // index-1+next[index-pos] < pos+extend[pos]-1
      extend[index] = next[index - pos];  // extend[pos] + pos 为之前匹配到的最远位置
    }
    else{
      mate_len = extend[pos] + pos - index; // 已经匹配的长度
      if( mate_len < 0)
        mate_len = 0;
      for( ; index + mate_len < str_len && mate_len < sub_len && sub_str[mate_len] == str[mate_len + index] ; mate_len++ ) {}
      extend[index] =  mate_len ;//++mate_len;
      pos = index;
    }

  }
}