基于bf和kmp的串模式匹配算法设计与实现(c语言)

基于bf和kmp的串模式匹配算法设计与实现(c语言)

ID:33411170

大小:84.00 KB

页数:4页

时间:2019-02-25

基于bf和kmp的串模式匹配算法设计与实现(c语言)_第1页
基于bf和kmp的串模式匹配算法设计与实现(c语言)_第2页
基于bf和kmp的串模式匹配算法设计与实现(c语言)_第3页
基于bf和kmp的串模式匹配算法设计与实现(c语言)_第4页
资源描述:

《基于bf和kmp的串模式匹配算法设计与实现(c语言)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构KMF算法//代码#include"stdafx.h"#include"string.h"#include"malloc.h"#defineMAXSTRLEN255intk;//定义全局变量typedefcharSString[MAXSTRLEN+1];//0号元素存放串的长度。intStrAssign(SStringT,char*chars){//生成一个其值等于chars的串Tinti;if(strlen(chars)>MAXSTRLEN)return0;else{T[0]=strlen(c

2、hars);for(i=1;i<=T[0];i++)T[i]=*(chars+i-1);return1;}}intStrLength(SStringS){//返回串的元素个数returnS[0];}intStrCompare(SStringS,SStringT){//操作结果:若S>T,则返回值>0;若S=T,则返回值=0;若S

3、}///////////////////intSubString(SStringSub,SStringS,intpos,intlen){//用Sub返回串S的第pos个字符起长度为len的子串。inti;if(pos<1

4、

5、pos>S[0]

6、

7、len<0

8、

9、len>S[0]-pos+1)return0;for(i=1;i<=len;i++)Sub[i]=S[pos+i-1];Sub[0]=len;return1;}///////////intIndex(SStringS,SStringT,intpos)

10、{//返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0。//其中,T非空,1≤pos≤StrLength(S)。inti,j;if(1<=pos&&pos<=S[0]){i=pos;j=1;while(i<=S[0]&&j<=T[0])if(S[i]==T[j])/*继续比较后继字符*/{++i;++j;}else/*指针后退重新开始匹配*/{i=i-j+2;j=1;}if(j>T[0])returni-T[0];elsereturn0;}elsereturn0;}/////////

11、/voidget_next(SStringT,intnext[]){/*求模式串T的next函数值并存入数组next算法4.7*/inti=1,j=0;next[1]=0;while(i

12、

13、T[i]==T[j]){++i;++j;next[i]=j;}elsej=next[j];k=i;}//////////////////////intIndex_KMP(SStringS,SStringT,intpos,intnext[]){/*利用模式串T的next函数求T在主串S中第po

14、s个字符之后的位置的KMP算法。*//*其中,T非空,1≤pos≤StrLength(S)。算法4.6*/inti=pos,j=1;while(i<=S[0]&&j<=T[0])if(j==0

15、

16、S[i]==T[j])/*继续比较后继字符*/{++i;++j;}else/*模式串向右移动*/j=next[j];if(j>T[0])/*匹配成功*/returni-T[0];elsereturn0;}intmain(intargc,char*argv[]){intm,i,j,*q;SStringT,S;ch

17、arp[100];printf("请输入主串");scanf("%s",p);StrAssign(S,p);//生成主串S。printf("请输入子串");scanf("%s",p);StrAssign(T,p);//生成子串T。printf("请输入在哪位置之后");scanf("%d",&m);q=(int*)malloc((i+1)*sizeof(int));//生成T的next数组get_next(T,q);printf("子串的next函数为:");for(j=1;j<=k;j++)print

18、f("%d",*(q+j));printf("");i=Index_KMP(S,T,m,q);if(i){printf("用KMF得主串和子串在第%d个字符处首次匹配",i);printf("用BF得主串和子串在第%d个字符处首次匹配%d",Index(S,T,m));}elseprintf("子串和主串不匹配");return0;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。