数据结构课程设计文章编辑系统_第1页
数据结构课程设计文章编辑系统_第2页
数据结构课程设计文章编辑系统_第3页
数据结构课程设计文章编辑系统_第4页
数据结构课程设计文章编辑系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

滨江学院数据结构课程设计题目文章编辑系统文章编辑系统2、内容综述:此系统要求功能:输入一页文字,程序可以统计出文字、数字、空格的个数。基本要求静态存储一页文章,每行最多不超过80个字符,共N行;s要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。可行性分析:2、系统设计2.1需求分析:存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)、分行输出用户输入的各行字符;、分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"、输出删除某一字符串后的文章;2.2总体设计根据题目,可得主程序设计流程图如下所示:开始开始菜单输入文章浏览文章统计信息统计字符串删除字符串退出图2-1文章输入、浏览、统计串、统计及删除的详细流程如图2—2所示:回车回车回车回车选定选项3显示文章统计信息的结果调出主菜单回车回车选定选项4 输入要统计的字符串 显示出现次数接上页 回车回车回车回车回车调出主菜单选定选项5输入要删除的字符串显示删除后的文本调出主菜单选定选项6退出/结束图2-22.2.1.输入模块存储结构:采用单链表结构存储文章,每个结点存储一行,每行最长不超过80个字符。结构定义:typedefstructline{char*data;//字符串指针需要时动态分配内存structline*next;}LINE;算法描述:用gets函数接收输入,每遇到一个回车换行就新建一个结点,将当前行存入其data域。当发现输入为^E时,在Data的最后加上字符串结束标志,并置当前结点的Next指针域为NULL。2.2.2统计模块统计模块包括统计全部字母数,统计数字个数,统计空格个数,以及统计文章总字数,这四个部分的实现算法大体相同,四者的关系是:全部字母数+数字个数+空格个数=文章总字数,也就是说可以在统计出其中三者的前提下计算出第四个的数量。另外一个重要的统计功能是统计某一字符串在整篇文章中出现的次数,这个需要用到串的模式匹配算法来实现。2.2.3删除模块删除模块的算法思想类同统计字符串的算法思想,由于采用了链表的存储结构,使得删除算法的时间复杂度大大减少。2.2.4查找模块intFindString(LINE*&head,char*str)/*统计str在文章中出现的次数*/求在一行中Str出现的次数的流程图:①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步

开始开始count=0;h=0;len1=0;len2=strlen(str);p->data[i]==str[0]i++k=0;j=0;p->data[i+j]==str[j]k++;j++;k=len2count++;i=i+k-1;结束YNYNNY图2-3voiddelstringword(char*s,char*str)/*删除字符串*s中的字符串*str*/实现思想:①.从字符串s中寻找str第一次出现的位置*p=strstr(s,str);②.len=strlen(s);i=len-strlen(p)即前i项恰好不含要删除的字符串,将前i项复制到tmp中③.j=i+strlen(str)即要删除的字符串在i+1和j之间,将j之后的字符串复制到tmp中④.将tmp赋给串s,返回spsstrijfor(m=0;m<i;m++)for(n=j;n<len;n++)tmp[count++]=s[m];tmp[count++]=s[n];tmp图2-32.3详细设计:#include<string.h>#include<stdio.h>#include<stdlib.h>#include<conio.h>typedefstructline{char*data;structline*next;}LINE;voidCreate(LINE*&head){printf("请输入一页文章,以Ctrl+E为结尾(每行最多输入80字符!):\n");LINE*p=newLINE;/*首先为链表建立一个附加表头结点*/head=p;/*将p付给表头指针*/charch[100];while(1){gets(ch);/*输入字符串!*/if(strlen(ch)>80){printf("每行最多输入80字符");break;}if(ch[0]==5)break;/*如果发现输入^E,则退出输入*/p=p->next=newLINE;p->data=newchar[strlen(ch)+1];/*为结点分配空间*/strcpy(p->data,ch);if(ch[strlen(ch)-1]==5)/*除去最后一个控制符^E*/{p->data[strlen(ch)-1]='\0';break;}}p->next=NULL;/*最后的一个指针为空*/head=head->next;}/**文本字数统计**/intCount_Space(LINE*&head)//统计空格数{LINE*p=head;intasc_space=32;intcount=0;inti;intLen;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]==asc_space)count++;}while((p=p->next)!=NULL);returncount;}intCount_Num(LINE*&head)//统计数字个数{LINE*p=head;intcount=0;intLen;inti;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>=48&&p->data[i]<=57)count++;}while((p=p->next)!=NULL);returncount;}intCount_All_Word(LINE*&head)//统计文章的总字数{LINE*p=head;intcount=0;do{count+=strlen(p->data);}while((p=p->next)!=NULL);returncount;}intCount_Letter(LINE*&head)//统计字母数{LINE*p=head;intcount=0;intLen;inti;do{Len=strlen(p->data);for(i=0;i<Len;i++)if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;//计算字母个数}while((p=p->next)!=NULL);returncount;}intFind_Word(LINE*&head,char*sch)//统计sch在文章中出现的次数{LINE*p=head;intcount=0;intlen1=0;intlen2=strlen(sch);inti,j,k;do{len1=strlen(p->data);//当前行的字符数for(i=0;i<len1;i++){if(p->data[i]==sch[0]){k=0;for(j=0;j<=len2-1;j++)if(p->data[i+j]==sch[j])k=k+1;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);returncount;}/**特定字符串的删除**/voiddel_string_word(char*s,char*sch){char*p=strstr(s,sch);chartmp[80];intlen=strlen(s);intk,kk;inti=len-strlen(p);intj=i+strlen(sch);intcount=0;for(k=0;k<i;k++)tmp[count++]=s[k];for(kk=j;kk<len;kk++)tmp[count++]=s[kk];tmp[count]='\0';strcpy(s,tmp);}voidDel_String(LINE*&head,char*sch)//删除指定的字符串{LINE*p=head;do{while(strstr(p->data,sch)!=NULL)del_string_word(p->data,sch);}while((p=p->next)!=NULL);}/**打印输入的文本**/voidOutPutTxt(LINE*&head)//向屏幕输出文章{LINE*p=head;printf("文本文件输出如下:");do{printf("%s\n",p->data);}while((p=p->next)!=NULL);}voidCount(LINE*&head){printf("文章统计信息结果:\n");printf("全部字母数:%d\n",Count_Letter(head));printf("数字个数:%d\n",Count_Num(head));printf("空格个数:%d\n",Count_Space(head));printf(" 文 章 总 字数:%d\n",(Count_All_Word(head)+Count_Num(head)+Count_Space(head)+Count_Letter(head))/2);printf("\n");}voidmain(){LINE*head;charsch[20];charID[10];charch;chartmp_sch[20];printf("文章编辑系统\n");printf("开发者:吉星星\n");printf("学号:20102344910\n");while(1){printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("1.新建文本\n");printf("2.浏览输入文本\n");printf("3.文本字符统计\n");printf("4.指定字符串的统计\n");printf("5.指定字符串的删除\n");printf("6.退出\n");printf("****************************************************************\n");printf("请输入序号:");scanf("%s",ID);while(1){if(strcmp(ID,"1")==0){printf("新建文本要覆盖已有文本,是否继续输入?(Y/N)\n");getchar();scanf("%c",&ch);system("cls");if(ch=='n'||ch=='N')break;elseif(ch=='y'||ch=='Y')Create(head);break;}elseif(strcmp(ID,"2")==0){system("cls");OutPutTxt(head);break;}elseif(strcmp(ID,"3")==0){system("cls");OutPutTxt(head);printf("\n");Count(head);break;}elseif(strcmp(ID,"4")==0){system("cls");printf("请输入要统计的字符串:");scanf("%s",sch);printf("\n");OutPutTxt(head);printf("\n");printf("出现的次数为:%d\n",Find_Word(head,sch));break;}elseif(strcmp(ID,"5")==0){system("cls");printf("请输入要删除的某一字符串:");scanf("%s",tmp_sch);printf("\n");OutPutTxt(head);Del_String(head,tmp_sch);pri

温馨提示

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

最新文档

评论

0/150

提交评论