简单匹配模式 (2)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includestdio.h#includestring.h#includestdlib.h#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineMAXSIZE40typedefintStatus;typedefcharString[MAXSIZE+1];typedefchar*SString;StatusStrAssign(StringT,char*chars);voidget_next(SStringT,int*next);intIndex_KMP(SStringS,SStringT,intpos);intmain(void){intpos=1;SStringT,S;T=(char*)malloc(40);S=(char*)malloc(40);char*chars;chars=ababcabcacbab;StrAssign(S,chars);chars=abcac;StrAssign(T,chars);printf(%d,Index_KMP(S,T,pos));getchar();return0;}StatusStrAssign(StringT,char*chars){inti;if(strlen(chars)MAXSIZE)returnERROR;else{T[0]=strlen(chars);for(i=1;i=T[0];i++)T[i]=*(chars+i-1);returnOK;}}voidget_next(SStringT,int*next){//算?法¤¡§4.7inti=1;next[1]=0;intj=0;while(iT[0]){if(j==0||T[i]==T[j]){++i;++j;next[i]=j;}elsej=next[j];}}intIndex_KMP(SStringS,SStringT,intpos){//算?法¤¡§4.6//利¤?用®?模¡ê式º?串ä?T的Ì?next函¡¥数ºy求¨®T在¨²主¡Â串ä?S中D第̨²pos个?字Á?符¤?之?后¨®的Ì?位?置?的Ì?//KMP算?法¤¡§。¡ê其?中D,ê?T非¤?空?,ê?1≤¨¹pos≤¨¹StrLength(S)。¡êintnext[255];inti=pos;intj=1;get_next(T,next);while(i=S[0]&&j=T[0]){if(j==0||S[i]==T[j]){//继¨¬续?比À¨¨较?后¨®继¨¬字Á?符¤?++i;++j;}elsej=next[j];//模¡ê式º?串ä?向¨°右®¨°移°?动¡¥}if(jT[0])returni-T[0];//匹£¤配?成¨¦功|elsereturn0;}//Index_KMP

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功