1、数据结构课程设计文字编辑器数据结构课程设计报告学校:中南大学学院:信息科学与工程学院班级:计算机科学与技术1101班姓名:杜茂鹏课题:文字编辑器时间:2013年7月3日目 录1 设计目的2 问题描述3 设计要求4 设计构思5 算法说明6 测试结果7 总结反思8 源程序1设计目的1) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4) 进行全面综合的训练,对课堂教学、实验等环节的有益补充。5) 提高解决实际问题和培养软件工作所需的动手
2、能力。6) 深化理解和灵活掌握教学内容7) 进行软件工程的综合训练。训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2问题描述功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;3设计要求输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输
3、入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章;4设计构思分别设计输入,输出,统计字母,统计数字,统计字符,查找,删除这7个函数,并在主函数中进行选择,没80个字符要添加换行符,并将输出结果和删除结果返回到一个txt文件中。文章存储在链表中,查找用模式匹配,删除字符用链表的节点删除法。统计用循环语句实现。5算法说明主函数统计函数输入函数输出函数输入文章创建文件循环遍历统计空格统计字母改写文件输出文章统计统计数字删除字符查找字符串结束6测试结果8总结反思通过本次课程设计,我对数据结构的理解进一步加深,我理解和掌握了每一段程序代码的功能及含
4、义,并且能够实现文字编辑的主要功能:利用链表实现文字的存储问题,利用模式匹配查找字符串。学习数据结构,我学会如何将所学的知识运用到实际中,解决一些实际的问题,这才是学习的根本。 当然在实验中我也遇到了不少实际性的问题,编写的程度要与实际有联系,这就不能只依赖于课本,还要联系实际多多思考,重复调试,不断改进,才能编出一个符合实际的有价值的系统。9源程序#include #include#include #include/创造链表 typedef char DataType;typedef struct node DataType ch500; struct node *next;Lstring;
5、 /输入函数Lstring *input() FILE*fp; if(fp=fopen(E:文字编辑结果.txt,w)=0) printf(打不开n); exit(0); Lstring *p,*head; int i=0,a=0; printf (*请输入一段文字,每行不超过80个字符,结束请按“#”*n); p=(Lstring *)malloc(sizeof(Lstring); head=p; p-chi=0; p-next=0; char str200; while(1) gets(str); if(strlen(str)80) printf(每行最多输入80个字符,请重启程序n);
6、exit(0); if(str0=35) str0=0; p-ch0=str0; break; p-next=(Lstring *)malloc(sizeof(Lstring); strcpy(p-ch,str); if(strstrlen(str)-1=35) p-chstrlen(str)-1=0; break; p=p-next; p-next=NULL; i=0;while(1) fputc(p-chi,fp); i+; if(p-chi=0) break;fputc(n,fp);fclose(fp); return head; /输出函数 Lstring *OutPut(Lstrin
7、g *head) Lstring *p=head; do printf(%sn,p-ch); while(p=p-next)!=NULL); return head;/统计字母函数 int Alphabet(Lstring *head) Lstring *p=head; int count=0; do int Len; Len=strlen(p-ch); for(int i=0;ichi=a&p-chichi=A&p-chinext)!=NULL); return count; /统计数字函数 int Num(Lstring *head) Lstring *p=head; int count=
8、0; do int Len; Len=strlen(p-ch); for(int i=0;ichi=0 & p-chinext)!=NULL); return count; /统计空格函数 int Space(Lstring *head) Lstring *p=head; int count=0; do int Len; Len=strlen(p-ch); for(int i=0;ichi=32)count+; while(p=p-next)!=NULL); return count;/总字数函数 int All(Lstring *head) Lstring *p=head; int coun
9、t=0; do count+=strlen(p-ch); while(p=p-next)!=NULL); return count;/串的简单模式匹配函数 int FindString(Lstring *head,char *str) Lstring *p=head; int count=0; int h=0; int len1=0; int len2=strlen(str); int i,j,k; do len1=strlen(p-ch); for(i=0;ichi=str0) k=0; for(j=0;jchi+j=strj) k+; if(k=len2) count+; i=i+k-1;
10、 while(p=p-next)!=NULL); return count; /删除函数 void delstringword(char *s,char *str) int a=0; char *p; int count,len,i,j; char s180; p=strstr(s,str); len=strlen(s); i=len-strlen(p); j=i+strlen(str); count=0; for(int m=0;mi;m+) s1count+=sm; for(int n=j;nch,str)!=NULL) delstringword(p-ch,str); while(p=p
11、-next)!=NULL); return head;/主函数 int main() int i=0; int m; Lstring *head; char s120,s220; head=input(); printf(输入的文章为:n); head=OutPut(head); printf(n); printf(n); printf( *统计结果* n); printf(n); printf( * 字母个数: %3d * n,Alphabet(head); printf( * 数字个数: %3d * n,Num(head); printf( * 空格个数: %3d *n,Space(hea
12、d); printf( * 文章总字数:%3d * n,All(head); printf(n); printf(n); printf( *n); printf( * 请选择要执行的操作 *n); printf( *n); printf( * 统计字符串 选择1 *n); printf( * 删除字符串 选择2 *n); printf( * 退出 选择3 *n); printf( *n); do printf(请输入你要选择的操作(1-3):); scanf(%d,&m); switch(m) case 3: exit(0); break; case 1: printf(请输入要统计的字符串:); scanf(%s,&s1); printf(%s在文章中出现的次数为:%d n,s1,FindString(head,s1); printf(n); break; case 2: printf(请输入要删除的某一字符串:); scanf(%s,&s2); head=DelString(head,s2); printf(删除%s后的文章为:n,s2); OutPut(head); break; while(m!=0);