字符串匹配之kmp

来源:互联网 发布:淘宝开店培训机构 编辑:程序博客网 时间:2024/06/12 01:03
/*file:KMP_alogrithm.cbrief:auther:yejingdata:2014.07.26ver: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;            elsej = 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;}

0 0
原创粉丝点击