您的位置:首页 > 其它

字符串匹配之rabin_karp

2014-08-05 19:59 253 查看
/*
file:rk_alogrithm.c
brief:
auther:yejing
data:2014.08.01
ver: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: