- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于改进型KMP算法的字符串查找与替换
数据结构实验报告学号:2014111962姓名:施永邦专业:计算机科学与技术知识范畴:串 完成日期:2016年04月6日实验题目:基于改进型KMP算法的字符串查找与替换实验内容及要求:从键盘输入三个字符串s、a、b,在串s中查找子串a,并将串s中的所有a替换为b,输出替换以后的串。注意:a和b的串长不要求相等;若s中无子串a,输出结果与串s相同。实验目的:掌握字符串模式匹配的KMP算法。数据结构设计简要描述:用char型数组储存串s,a,b。用int型数组储存模式串a的next数组。算法设计简要描述:在串s中查找子串a的起始位置使用了KMP算法。利用get_nextval函数得到模式串a的nextval数组。函数replace替换s中的a。用指向s的指针p先指向s起始地址,利用KMP算法得到s中第一个a起始位置,然后用b替换a,替换后p指向第一个a起始位置再向后b的长度,查找第二个a的起始位置,依次类推。输入/输出设计简要描述:按照提示:先输入s串,然后输入a串。 如果未找到a,则原样输出s。如果找到第一个a,输出第一个a的位置,并提示输入b,然后会替换剩下的所有a,输出替换后的s,并输出替换次数。编程语言说明:使用Visual C++编程。主要代码采用C语言实现 ;动态存储分配采用C++的new和delete操作符实现;输入与输出采用C++的cin和cout流;程序注释采用C/C++规范。主要函数说明:void get_nextval(char *t, intnextval[]); //get_nextval函数intindex_kmp(char *s, char *t, int next[]); //KMP算法void replace(char *s, char *b, int position, intlena);//替换字符串函数://b的长度大于a的情况下先将s中a后边的所有字符向后挪动lenb-lena个位置//b的长度小于a的情况下先将s中a后边的所有字符向前挪动lena-lenb个位置 //然后将a的字符逐个用b中的字符替换程序测试简要报告:无a测试程序输入输出结论程序输出结果与期望输出结果相符。a、b等长度测试程序输入输出结论程序输出结果与期望输出结果相符。a、b不等长度测试程序输入输出结论程序输出结果与期望输出结果相符。源程序代码:#includeiostream#includeiomanipusingnamespacestd;voidget_nextval(char *t, intnextval[]) {//get_nextval函数int j = 1, k = -1;nextval[0] = -1;while (t[j]) {if (k == -1 || t[j - 1] == t[k])if (t[++k] == t[j]) nextval[j++] = nextval[k];elsenextval[j++] = k;else k = nextval[k];}}intindex_kmp(char *s, char *t, intnext[]) {//KMP查找函数inti = 0, j = 0;while (s[i] t[j]) {if (j == -1 || s[i] == t[j]) {i++; j++;}else j = next[j];}if(!t[j]) returni - j;return -1;}voidreplace(char *s, char *b, intposition, intlena) {inti, j, lens = strlen(s), lenb = strlen(b);if (lenb lena) {//将a以后的字符串向后挪lenb-lena个位置for (i = lens + lenb - lena, j =lens; j = position+lena; i--, j--) s[i] = s[j];}elseif (lenb lena) {//将a以后的字符向前挪lenb-lana个位置for (i = position + lenb, j = position+lena; j = lens; i++, j++)s[i] = s[j];}i = 0;while (b[i]) {s[position++] = b[i++];}}intmain() {chars[40], a[40], b[40], *p;intnext[40], count = 0;while (1) {coutInput S:\n; cin s; p = s;coutInput A:\n; cin a;get_next(
您可能关注的文档
- 2016年远程培训通识专题1深化教育改革中的师德建设.docx
- 2016年静安区初三物理二模.doc
- 2016年高中人教版生物必修3练习第5章章末过关检测B卷Word版含答案.doc
- 2016年高中人教版生物必修3练习第5章第2节生态系统的能量流动Word版含答案.doc
- 2016扶梯定期检验自检报告V12.doc
- 2016概率统计期中考1-4答案版.doc
- 2016通识深化教育改革中的师德建设答案.docx
- 2016秋化学人教版选修4练习第一章化学反应与能量Word版含解析.docx
- 2016高考化学二轮复习习题专题5化学反应与能量Word版含解析.doc
- 2016高考物理二轮复习专题练习能量守恒定律的综合应用(含答案解析).docx
文档评论(0)