数据结构课程设计报告文本编辑和串查找统计.doc_第1页
数据结构课程设计报告文本编辑和串查找统计.doc_第2页
数据结构课程设计报告文本编辑和串查找统计.doc_第3页
数据结构课程设计报告文本编辑和串查找统计.doc_第4页
数据结构课程设计报告文本编辑和串查找统计.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构与算法设计课程设计报告 题目:文本编辑和串查找统计 学生姓名: 学 号: 班 级: 指导教师: 2011年 12月 29日 目录1. 需求分析说明.22. 总体设计 33. 详细设计 44. 实现部分 5-75. 总结 81. 需求分析说明1.1 题目与要求文本编辑和串查找统计任务:输入一页文字,程序可以统计出文字、数字、空格和其它标点符号的个数。静态存储一页文章,每行最多不超过80个字符,共N行;功能要求:1)、分别统计出其中英文字母数、空格数、标点符号及整篇文章总字数;2)、统计某一字符串在文章中出现的次数,并输出该次数;3)、删除某一子串,并将后面的字符前移。要求用菜单选择操作,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分5行输出全部字母数、数字个数、空格个数、“标点符号个数”文章总字数(3)输出删除某一字符串后的文章;1.2 本程序涉及的知识点链串的插入,删除,查找,模式匹配(knp算法)及文件的写入与写出,用switch,case语句进行菜单的选择,用while语句进行循环,用if语句进行条件的判断等等。2 总体设计2.1 基本思路本文采用链式存储字符串,链串的插入采用后插法,以*为字符串结束的标志。在插入字符串的同时用文件存储字符串。删除算法的基本思路:输入要删除的字符串,同样以#结束,然后在文中查找该字符串,若找到了则把它删除,同时长度要减少;否则,没找到不能删除。查找算法与删除算法类似;但也有不同之处,不同在于:这里是要查找某字符串在文中出现的次数,因此,当找到该字符串后还要继续往后查找,并将次数加1;直到文章的末尾才结束查找。 用菜单做选择,用switch,case语句进行选择判断,并用类的对象调用类的成员函数以实现特定的功能。 2.2 功能设计 根据提示选择相应功能 y n 选择操作退出调用相应函数 是否继续?3.详细设计ca类中有data和next分别表示输入的数据和指向下一个地址;另外还包含5个子函数,分别是1,void shuru()函数,用尾插法建立链串,并将字符串存入文件,遇到*时结束;2,void chazhao()函数,用于查找某个字符,当遇到的字符大于等于48并且小于等于57时,数字个数加1,当遇到的字符为标点符号时,相应的标点符号数加1,并输出;判断完后指针后移。3,void shanchu()为删除字符串的函数,输入一个字符,若在文中找到了一个字符与要删除的第一个字符相同,则指针分别往后移,若文中的下一个字符与第二个字符不相同,则继续找文中的下一个字符与要删除的字符从第一个字符开始从新匹配,直到要删除的字符都匹配完;找到了要删除的字符串在文中的位置后,将文中与这串字符匹配的第一个字符开始到最后一个匹配的这段字符删除;若没有找到该字符串则不能删除。4,void print1(link )函数,输出要删除的字符串。 5,void print2()函数用于查找字符串在文中出现的次数;设置一个整型变量num,用于统计出现次数,其初始值为0。同样采用模式匹配的算法,但不同的是,找到第一次在文中出现的位置后num+1,并且还要继续找文中的下一个,找到了又要num+1,直到文章的末尾,然后输出num值。 部分函数模块流程图: void Chazhao(ca *L) ca *H = L;char s80, *q;ca *p;couts; While (P!=NULL)&(Q!=NULL)Else if(P-data=Q-data ) if (*q = 0) n+; L = L-next; 4.实现部分#include#include#includestruct ca char data; ca *next;void Shuru(ca *L) cout输入一页文字(最多不超过80个字符,以*结束): data = getchar() != *) L-next = new ca; L = L-next; L-next = NULL;void Chazhao(ca *L) int n = 0; char s80, *q; ca *p; couts; while(L-next) for (p = L, q = s; *q != 0 & p-next; p = p-next, q+) if (p-data != *q) break; if (*q = 0) n+; L = L-next; cout字符串 s 出现 n 次n;ca *Shanchu(ca *L) ca *H = L; char s80, *q; ca *p; couts; if (H-data = *s) for (p = H-next, q = s+1; *q != 0 & p-next; p = p-next, q+) if (p-data != *q) break; if (*q = 0) H = p; while(L-next) for (p = L-next, q = s; *q != 0 & p-next; p = p-next, q+) if (p-data != *q) break; if (*q = 0) L-next = p; else L = L-next; return H;void print1(ca *L) while(L-next) coutdata; L = L-next; coutnext; L = L-next, n+) if(isalpha(L-data) p1+; else if(isdigit(L-data) p2+; else if(L-data = ) p3+; else if(L-data = n) n-; coutn全部字母数: p1; coutn数字个数: p2; coutn空格个数: p3; coutn文章总字数: nendl;void main() ca *L = new ca; int p1, p2, p3, n, data; Shuru(L); do coutn; cout*endl; cout* 1:统计中英文字母和空格数以及整篇文章总字数 *nendl; cout* 2:统计某一字符串在文章中出现次数 *nendl; cout* 3:删除某一子串 *nendl; cout* 4:分行输出用户输入的各行字符 *nendl; cout*data; switch(data) case 1:print2(L, p1, p2, p3, n);break; case 2:Chazhao(L);break; case 3:Shanchu(L); case 4:print1(L); while(data); 5.总结在做课程设计之前,我对文件操作这个知识点一直不是很理解,每当遇到要存储数据之类的问题时就不知所措。于是仔细看书,网上找资料理解了文件操作的基本操作。但在我完成文件操作后,另一个问题又出现了空格与换行符的存储问题。因为我用的是字符的链式存储,每当我输入空格和换行符时,在输出结果中却没有显示空格和换行符,最后在通过网上找资料解决。解决成了输入与输出问题后,还有一个查找问题。课本上介绍了一个模式匹配的knp算法,我在统计某一字符串在文中出现的次数及删除某一字符串时用到了这一算法,对于这一算法,我没有完全照搬,在统计字符串出现的次数时,我增加了一个num作为统计数,并在找到这一字符串后继续往后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论