您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 数据结构课程设计文字编辑器
文字编辑器1数据结构课程设计报告学校:中南大学学院:信息科学与工程学院班级:计算机科学与技术1101班姓名:杜茂鹏课题:文字编辑器时间:2013年7月3日文字编辑器2目录1.设计目的2.问题描述3.设计要求4.设计构思5.算法说明6.测试结果7.总结反思8.源程序文字编辑器31设计目的1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4)进行全面综合的训练,对课堂教学、实验等环节的有益补充。5)提高解决实际问题和培养软件工作所需的动手能力。6)深化理解和灵活掌握教学内容7)进行软件工程的综合训练。训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2问题描述功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;3设计要求输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章;4设计构思分别设计输入,输出,统计字母,统计数字,统计字符,查找,删除这7个函数,并在文字编辑器4主函数中进行选择,没80个字符要添加换行符,并将输出结果和删除结果返回到一个txt文件中。文章存储在链表中,查找用模式匹配,删除字符用链表的节点删除法。统计用循环语句实现。5算法说明主函数输入函数输出函数统计函数统计字母统计空格统计统计数字循环遍历创建文件输入文章输出文章改写文件查找字符串删除字符结束文字编辑器56测试结果文字编辑器68总结反思通过本次课程设计,我对数据结构的理解进一步加深,我理解和掌握了每一段程序代码的功能及含义,并且能够实现文字编辑的主要功能:利用链表实现文字的存储问题,利用模式匹配查找字符串。学习数据结构,我学会如何将所学的知识运用到实际中,解决一些实际的问题,这才是学习的根本。当然在实验中我也遇到了不少实际性的问题,编写的程度要与实际有联系,这就不能只依赖于课本,还要联系实际多多思考,重复调试,不断改进,才能编出一个符合实际的有价值的系统。9源程序#includestdio.h#includestdlib.h文字编辑器7#includestring.h#includemalloc.h//创造链表typedefcharDataType;typedefstructnode{DataTypech[500];structnode*next;}Lstring;//输入函数Lstring*input(){FILE*fp;if((fp=fopen(E:\\文字编辑结果.txt,w))==0){printf(打不开\n);exit(0);}Lstring*p,*head;inti=0,a=0;printf(************请输入一段文字,每行不超过80个字符,结束请按“#”************\n);文字编辑器8p=(Lstring*)malloc(sizeof(Lstring));head=p;p-ch[i]=0;p-next=0;charstr[200];while(1){gets(str);if(strlen(str)80){printf(每行最多输入80个字符,请重启程序\n);exit(0);}if(str[0]==35){str[0]='\0';p-ch[0]=str[0];break;}p-next=(Lstring*)malloc(sizeof(Lstring));strcpy(p-ch,str);if(str[strlen(str)-1]==35){p-ch[strlen(str)-1]='\0';break;}文字编辑器9p=p-next;}p-next=NULL;i=0;while(1){fputc(p-ch[i],fp);i++;if(p-ch[i]=='\0')break;}fputc('\n',fp);fclose(fp);returnhead;}//输出函数Lstring*OutPut(Lstring*head){Lstring*p=head;do{printf(%s\n,p-ch);}while((p=p-next)!=NULL);returnhead;文字编辑器10}//统计字母函数intAlphabet(Lstring*head){Lstring*p=head;intcount=0;do{intLen;Len=strlen(p-ch);for(inti=0;iLen;i++)if((p-ch[i]='a'&&p-ch[i]='z')||(p-ch[i]='A'&&p-ch[i]='Z'))count++;}while((p=p-next)!=NULL);returncount;}//统计数字函数文字编辑器11intNum(Lstring*head){Lstring*p=head;intcount=0;do{intLen;Len=strlen(p-ch);for(inti=0;iLen;i++)if(p-ch[i]='0'&&p-ch[i]='9')count++;}while((p=p-next)!=NULL);returncount;}//统计空格函数intSpace(Lstring*head){Lstring*p=head;intcount=0;do{intLen;Len=strlen(p-ch);for(inti=0;iLen;i++)文字编辑器12if(p-ch[i]==32)count++;}while((p=p-next)!=NULL);returncount;}//总字数函数intAll(Lstring*head){Lstring*p=head;intcount=0;do{count+=strlen(p-ch);}while((p=p-next)!=NULL);returncount;}//串的简单模式匹配函数intFindString(Lstring*head,char*str){文字编辑器13Lstring*p=head;intcount=0;inth=0;intlen1=0;intlen2=strlen(str);inti,j,k;do{len1=strlen(p-ch);for(i=0;ilen1;i++){if(p-ch[i]==str[0]){k=0;for(j=0;jlen2;j++)if(p-ch[i+j]==str[j])k++;if(k==len2){count++;i=i+k-1;}}}}while((p=p-next)!=NULL);returncount;}//删除函数文字编辑器14voiddelstringword(char*s,char*str){inta=0;char*p;intcount,len,i,j;chars1[80];p=strstr(s,str);len=strlen(s);i=len-strlen(p);j=i+strlen(str);count=0;for(intm=0;mi;m++)s1[count++]=s[m];for(intn=j;nlen;n++)s1[count++]=s[n];s1[count]='\0';strcpy(s,s1);FILE*f1;if((f1=fopen(E:\\文字编辑结果.txt,a+))==0){printf(打不开\n);exit(0);}while(1){文字编辑器15fputc(s1[a],f1);a++;if(s1[a]=='\0')break;}fclose(f1);}Lstring*DelString(Lstring*head,char*str){Lstring*p=head;do{while(strstr(p-ch,str)!=NULL)delstringword(p-ch,str);}while((p=p-next)!=NULL);returnhead;}//主函数intmain(){文字编辑器16inti=0;intm;Lstring*head;chars1[20],s2[20];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(head));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);文字编辑器17switch(m){case3:exit(0);break;case1:printf(请输入要统计的字符串:);scanf(%s,&s1);printf(%s在文章中出现的次数为:%d\n,s1,FindString(head,s1));printf(\n);break;case2:printf(请输入要删除的某一字符串:);scanf(%s,&s2);head=DelString(head,s2);printf(删除%s后的文章为:\n,s2);OutPut(head);break;}}while(m!=0);}
本文标题:数据结构课程设计文字编辑器
链接地址:https://www.777doc.com/doc-5238194 .html