字符串模式匹配

来源:互联网 发布:电脑上画画的软件 编辑:程序博客网 时间:2024/05/22 11:52
#include<stdio.h>#include<string.h>//Naive版本,>>数据结构P79int StringMatch(char* s,char* t){int i=0,j=0;int len_s=strlen(s);int len_t=strlen(t);while(i<len_s && j<len_t){if(s[i]==t[j]){++i;++j;}else{i=i-j+1;//返回到主串的下一个字符重新匹配 j=0;}}if(j==len_t){//匹配成功 ,返回第一个字符的序号return (i-len_t);}else{return (-1);}}//KMP版本void Pre_Handle(char* t,int kobe[],int len_t){    int i=0,j=-1;    kobe[0]=-1;    while(i<len_t){        if(j==-1||t[i]==t[j]){            ++i;            ++j;            kobe[i]=j;        }        else{            j=kobe[j];        }    }}int StringMatch_KMP(char* s,char* t){    int i=0,j=0;    int len_s=strlen(s);    int len_t=strlen(t);    int kobe[len_t];    Pre_Handle(t,kobe,len_t);    while(i<len_s && j<len_t){        if(j==-1||s[i]==t[j]){            ++i;            ++j;        }        else{           j=kobe[j];        }    }    if(j==len_t){//匹配成功 ,返回第一个字符的序号        return (i-len_t);    }    else{        return (-1);    }}//testint main(){    char* s="hello,world";    char* t="wor";printf("%d\n",StringMatch(s,t));    printf("%d",StringMatch_KMP(s,t));return 0;}

原创粉丝点击