/*
file:KMP_alogrithm.c
brief:
auther:yejing
data:2014.07.26
ver:1(create the file 7/26)
test pc:ubuntu 12.14
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void generate_bt_array(int bt_array[], char tar_string[], int n)
{
int i = 1;
bt_array[0] = 0;
while(i < n)
{
if(tar_string[i] == tar_string[bt_array[i-1]])
bt_array[i] = bt_array[i-1] + 1;
else
bt_array[i] = 0;
++i;
}
return;
}
int kmp_alogrithm(char* src_string, char* tar_string)
{
if(!src_string || !tar_string)
return -1;
int i = 0, j = 0;
int tar_len = strlen(tar_string);
int src_len = strlen(src_string);
int* bt_array = (int*)malloc(sizeof(int) * tar_len);
if(!bt_array)
return -1;
generate_bt_array(bt_array, tar_string, tar_len);
while( i < src_len && j < tar_len)
{
if(src_string[i] == tar_string[j])
{
++i;
++j;
}
else
{
if(!j)
++i;
else
j = bt_array[j - 1];
}
}
free(bt_array);
if(j==tar_len)
return i-tar_len;
else
return -1;
}
int main(int argc, char* argv[])
{
char *src_string = "ABCDABCDABCDABCDABCDABCDABCDABFABCDABE";
char *tar_string = "ABCDABE";
int index = kmp_alogrithm(src_string, tar_string);
printf("kmp_index:%d \n", index);
pause();
return 0;
}
字符串匹配之kmp
最新推荐文章于 2025-04-13 17:39:05 发布