编译环境VS2013

编译环境VS2013

ID:41528179

大小:180.00 KB

页数:7页

时间:2019-08-27

编译环境VS2013_第1页
编译环境VS2013_第2页
编译环境VS2013_第3页
编译环境VS2013_第4页
编译环境VS2013_第5页
资源描述:

《编译环境VS2013》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、//编译环境:VS2013//2013年10月12日,第一次编辑,实现Brute-Force算法和KMP算法//2013年10月14日,第二次编辑,主要增加了KMP算法中的next函数的修正值算法getnextval()//对于Brute-Force算法就是用循环结构控制,从目标串的第i=pos-1个字符开始与模式串的第j=0个字符比较。//若相等则i++,j++;否则目标串再从i-j+1个字符开始与模式串的第j=0个字符比较。//Brute-Force算法存在指针的回溯,算法效率较低,最坏的时间复杂度为O(

2、n*m)。//KMP算法主要是引入了next函数,对指针的回溯有了很好的解决。next函数用来求解模式串自身局部匹配的信息。//next函数确定了在模式串匹配不成功的第j个字符处模式串应往右移的量为j-next[j]个字符,再与目标串的失配点进行匹配。//next函数的修正值算法考虑到了在模式串中出现t[j]==t[k],而目标串中的字符s[i]与t[j]比较不相等时的情况,//不再需要与t[k]进行比较,而直接与t[next[k]]进行比较即可,因为此时的next[j]应和next[k]值相同。//KMP算

3、法相比较于Brute-Force算法效率极大提高,时间复杂度为O(n+m)。#define_CRT_SECURE_NO_WARNINGS#include#include//包含exit()函数#include#defineINITSIZE100typedefstruct{char*ch;intlength;intstrsize;}string;voidinitstring(string*s);//初始化串函数voidstrassign(string*s

4、1,char*s2);//串赋值函数intBF_index(string*s,string*t,intpos);//Brute-Force函数voidgetnext(string*t,intnext[]);//由模式串t求出其next值voidgetnextval(string*t,intnextval[]);//由模式串t求出其nextval值intKMP_index(string*s,string*t,intpos);//KMP函数,使用getnext()函数intKMP_index2(string*s,

5、string*t,intpos);//KMP函数,使用next函数的修正值intmain()7/7{strings,t;charstr1[INITSIZE],str2[INITSIZE];intpos,i;initstring(&s);initstring(&t);printf("请输入要查找的目标串S:");gets(str1);//gets()用于获取一行字符串,中间可以有空格,以回车结束strassign(&s,str1);printf("请输入要查找的模式串T:");gets(str2);strass

6、ign(&t,str2);printf("请输入模式匹配的起始位序:");scanf("%d",&pos);i=BF_index(&s,&t,pos);if(i!=0)printf("1.Brute-Force算法匹配结果:t模式串T在目标串S中的位序为:%d",i);elseprintf("1.Brute-Force算法匹配结果:t模式匹配失败!");i=KMP_index(&s,&t,pos);if(i!=0)printf("2.KMP算法匹配结果:t模式串T在目标串S中

7、的位序为:%d",i);elseprintf("2.KMP算法匹配结果:t模式匹配失败!");i=KMP_index2(&s,&t,pos);if(i!=0)printf("3.KMP算法匹配结果(使用next函数的修正值):t模式串T在目标串S中的位序为:%d",i);elseprintf("3.KMP算法匹配结果(使用next函数的修正值):t模式匹配失败!");return0;}voidinitstring(string*s){7/7s->ch=(char*)m

8、alloc(sizeof(char)*INITSIZE);if(s->ch==NULL){puts("动态内存分配失败!");exit(-1);}s->length=0;s->strsize=INITSIZE;return;}voidstrassign(string*s1,char*s2){inti=0;while(s2[i]!='')//求出常量串s2的长度i++;if(i>s1->strsi

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

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

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