字符串模式匹配算法(C语言)100积分奖励

第一个朴素算法:

1.常见的字符串模式匹配算法:

int index(char s[],char t[],int pos)

/*从POS开始查找并返回S中模式字符串T的位置索引。如果T不是S的子串,则返回-1。*/

{

int i,j,slen,tlen

i = posj = 0;//i,j分别表示主串和模式串的位置。

slen = strlen(s);tlen = strlen(t);//计算主字符串和模式字符串的长度。

while(我& lt斯伦& amp& ampj & lttlen)

{

if(s[I]= = t[j]){ i++;j++;}

else { I = I-j+1;j = 0;}

}

if(j & gt;=tlen)返回I-tlen;

return-1;

}

第二KMP算法。该算法支持从主字符串的任何位置开始搜索。

2.KMP算法:

//查找模式字符串的下一个函数。

void get_next(char *p,int next[])

{

int i,j,slen

slen = strlen(p);I = 0;

下一个[0]=-1;j =-1;

while(我& ltslen)

{

if(j = =-1 | | p[I]= = p[j]){ ++ I;++ j;next[I]= j;}

else j = next[j];

}

}

//KMP模式匹配算法

int index_kmp(char *s,char *p,int pos,int next[])

/*使用模式字符串P的NEXT函数来查找P在主字符串S中从pos字符开始的位置*/

/*如果匹配成功,则返回模式串在主串中的位置索引。否则,-1 */

{

int i,j,slen,plen

I = pos-1;j =-1;

slen = strlen(s);plen = strlen(p);

while(我& lt斯伦& amp& ampj & ltplen)

{

if(j = =-1 | | s[I]= = p[j]){ ++ I;++ j;}

else j = next[j];