字符串匹配之rabin_karp

来源:互联网 发布:c语言游戏开发教程 编辑:程序博客网 时间:2024/06/11 01:21
/*file:rk_alogrithm.cbrief:auther:yejingdata:2014.08.01ver:1(create the file 8/1)test pc:ubuntu 12.14*/#include <stdio.h>#include <stdlib.h>  #include <string.h>       void rabin_karp_alogrithm( char *src_string, char *tar_string)  {      if(!src_string || !tar_string)return;int i, j;     int src_len = strlen(src_string);      int tar_len = strlen(tar_string);        int tar_matcher = 0;      int src_matcher = 0;int prime_num = 11;    int highest_bit = 1;int max_character_num = 255;                for( i = 0; i < tar_len; ++i)      {          tar_matcher = ( max_character_num * tar_matcher + tar_string[i] ) % prime_num;          src_matcher = ( max_character_num * src_matcher + src_string[i] ) % prime_num;      }  for( i = 0; i < tar_len - 1; ++i)          highest_bit = (highest_bit * max_character_num) % prime_num;             for( i = 0; i <= src_len - tar_len; ++i)      {          if( tar_matcher == src_matcher)          {              for(j = 0; j < tar_len; j++)                  if(src_string[i+j] != tar_string[j])                      break;              if(j == tar_len)                  printf("match index:%d \n", i);         }          if(i < src_len - tar_len)          {              src_matcher = ( max_character_num * ( src_matcher - src_string[i] * highest_bit ) + src_string[i + tar_len] ) % prime_num; //向前移动一个字符             if( src_matcher < 0 )                  src_matcher += prime_num;         }      }  }       int main(int argc, char* argv[])  {      char tar_string[] = "yejing";     char src_string[] = "yejinglxlyejinglxlyejinglxlyejinglxl";           rabin_karp_alogrithm(src_string, tar_string);      return 1;  }

0 0
原创粉丝点击