字符串模式匹配算法(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];