1、文章编辑中北大学数 据 结 构课 程 设 计 说 明 书学生姓名:史瑶捷学 号:1021011621学 院:软件学院专 业:软件开发与测试题 目:文章编辑指导教师何志英2011年12月20日1. 设计任务概述总体框图功能描述:文本编辑设计,可以分别统计输入的英文、数字、空格及总字符的个数;可统计其子串出现的次数;可删除原字符串中的一子串,并将后面的字符前移。2. 本设计所采用的数据结构 文件编辑采用线性进行存储。3. 功能模块详细设计3.1详细设计思想 存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字.输出形式:(1)分行输出用户
2、输入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章。 数据类型link定义如下: typedef struct link char data; struct link *next;LNode; 3.2 核心代码1.新建文本并输入文章void InitList(LNode *L)cout输入一页文字(以#结束): endl;cout(可以输入大写、小写的英文字母、任何数字及标点符号)data=getchar()!=#) L-next=new(LNode); L=L-next;L-next=NULL;2.统计指定字符串出现次数并输出void
3、countStr(LNode *L) int n=0; char s80,*q; LNode *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字符串sn次;3. 删除某一子串,并将后面的符前移。LNode* del(LNode *L) LNode *y=L; LNode *h=y; char s80,*q; LNode *p; couts; if(h-data=*s) for(p=h-next,q=s+1;*q!=0&p
4、-next;p=p-next,q+) if(p-data!=*q) break; if(*q=0) h=p; while(y-next) for(p=y-next,q=s;*q!=0&p-next;p=p-next,q+) if(p-data!=*q) break; if(*q=0) y-next=p; elsey=y-next; while(h-next) coutdata; h=h-next;coutnext!=NULL;L=L-next,n+) if(isalpha(L-data) p1+; else if(isdigit(L-data) p2+; else if(L-data= ) p
5、3+; else if(L-data=n) n-; coutn全部字母数: p1; coutn数字个数: p2; coutn空格个数: p3; coutn整篇文章的总字数:data!=#) coutdata; t=t-next; coutendl;3.3 1.测试数据文章内容:there are 123 students需要统计的字符串:re需要删除的字符串:re2.测试输出的结果(1)文章编辑初始运行结果(2)详细操作步骤1).输入文章并分别统计出其中英文字母数和空格数及整篇文章总字数2). 统计指定字符串出现次数并输出3) . 删除某一子串,并将后面的字符前移4. 课程设计心得、存在问题及
6、解决方法通过这次数据结构的课程设计,我不仅是完成了任务,也深刻的体会到了 “实践是体验真理的标准”的寓意。“数据结构”是计算机程序设计的重要理论技术基础,它是计算机学科的核心课程。对于我们计算机专业学生来说,学好这门课是必要的。这次的设计我们也发现了自己的不足。总的来说这次的课程设计让我受益匪浅,逻辑思维能力的开发,分析问题和解决问题的能力的提高。同时也感谢尹四清老师的指导,在您的指导的下我才能顺利完成我的课程设计。希望以后多进行这样课题,培养学生独立思考问题的能力,提高实际操作水平。 附录 源代码#includeusing namespace std;typedef struct linkc
7、har data; struct link *next;LNode;void InitList(LNode *L)cout输入一页文字(以#结束): endl;cout(可以输入大写、小写的英文字母、任何数字及标点符号)data=getchar()!=#) L-next=new(LNode); L=L-next;L-next=NULL;void countStr(LNode *L) int n=0; char s80,*q; LNode *p; couts; while(L-next) for(p=L,q=s;*q!=0&p-next;p=p-next,q+) if(p-data!=*q) b
8、reak; if(*q=0) n+; L=L-next; cout字符串s出现ndata!=#) coutdata; t=t-next; coutendl;LNode* del(LNode *L) LNode *y=L; LNode *h=y; char s80,*q; LNode *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(y-next) for(p=y-next,q=s;*q!=0&p-next;p=p-next
9、,q+) if(p-data!=*q) break; if(*q=0) y-next=p; elsey=y-next; while(h-next) coutdata; h=h-next; coutnext!=NULL;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整篇文章的总字数:n;void main()int c; do LNode *L=new(LNode);InitList(L); cout统计中英文字母和空格数以及整篇文章总字数:n; print2(L); coutendl; cout分行输出用户输入的各行字符:n; print1(L); cout请输入需要统计字符串:endl; countStr(L); coutendl; cout请输入需要删除的字符串:endl; del(L); coutc; while(c);