![数据结构课设文章编辑_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/fc82d690-c221-4b27-bbbe-6bc95ab269d9/fc82d690-c221-4b27-bbbe-6bc95ab269d91.gif)
![数据结构课设文章编辑_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/fc82d690-c221-4b27-bbbe-6bc95ab269d9/fc82d690-c221-4b27-bbbe-6bc95ab269d92.gif)
![数据结构课设文章编辑_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/fc82d690-c221-4b27-bbbe-6bc95ab269d9/fc82d690-c221-4b27-bbbe-6bc95ab269d93.gif)
![数据结构课设文章编辑_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/fc82d690-c221-4b27-bbbe-6bc95ab269d9/fc82d690-c221-4b27-bbbe-6bc95ab269d94.gif)
![数据结构课设文章编辑_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-2/10/fc82d690-c221-4b27-bbbe-6bc95ab269d9/fc82d690-c221-4b27-bbbe-6bc95ab269d95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程设计题目:文早编辑专业:信息工程班级:1720601学生姓名:指导教师:、实验目的及要求:任务:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(D分行输出用户输入的各行字符;(2)分4行输出“全部字母数”、”数字个数“、”空格个数”、”
2、文章总字数”(3) 输出删除某一字符串后的文章;实验时间、地点:一、概要设计(实验思路)1 .问题分析本程序是对一段英文文章的内容进行处理,存储方式采用链式存储。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,字母数、空格数、数字数直接通过比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能
3、对文章中需要删除的字符或者字符串进行查找,然后对其进行删除。2 .数据结构选择本程序是对输入的文字进行操作,故使用的数据结构为单链表操作。根据第一部分的问题分析有该链表操作有3部分:另有全局变量*head,作为文章的头指针。创建结构体:typedef struct list char data80; int length;struct _list *n ext;struct i st *pre; in trow;记录一行字符记录一行字符长度 后继指针前趋指 针记录整篇文章的行数LinkList;在文章内容创建部分中使用线性表的链式存储,并使用全局变量对文本的各种信息进行存储;文章的读取、内容统
4、计、删除、查找都采用链表操作完成。3 .流程图(1)主框架:(2)文章内容统计子菜单(3)文章内容处理子菜单文SearchWord。函数实现查找早二内DeleteWord。函数内容删除容处-Printword()显示当前内容理J子I菜返回主菜单单退出程序I.(4)使用函数列表及关系图函数名:1、CreatWord()文本输入函数,对文本的内容进行输入2、PrintWord()当前文本内容输出函数,将当前存储在链表中的文本内容输出5、CountWord()文章内容统计函数,对存储在链表中文本内容进行统计6、SearchWord()文章内容查找函数7、DeleteWord()文章内容删除函数8、B
5、menu()文本内容处理菜单函数9、AboutWord()显示作者信息的函数10、menu()主菜单函数11、main()主函数关系图:二、详细设计(实验过程)1、数据结构定义char data80; int length; struct list *next; struct list *pre; int row;typedefstructlist/记录一行字符V/记录一行字符长度/后继指针/前趋指针*/记录整篇文章的行数*/LinkList;2、全局变量定义LinkListhead;/*定义全局变量*head,文章首行头指针/intNUM,C,N;/*定义全局变量,Num用来记录行号,C用来
6、记录子串在主串中出现的总次数*/3、函数说明(1)CreatWord()文本创建函数LinkList*CreatWord()(LinkList*temp;charch;intij;head->next=(LinkList*)malloc(sizeof(LinkList);/head->pre=NULL;temp=head->next;/temp->pre=NULL;temp->length=O;for(i=0;i<80;i+)temp->datai='O'叫叩门多j.j创建文本7,.27,7,7,7,7,7,7,7,7,请输入文章(输入
7、#号结束):nn");for(j=0;j<Link_Size;j+)for(i=0;i<80;i+)ch=getchar();temp->datai=ch;temp->length+;if(ch=f#f)NUM=j;break;)if(ch=,#1)(temp->length=i;temp->next=NULL;break;temp->next=(LinkList*)malloc(sizeof(LinkList);temp->next->pre=temp;temp=temp->next;for(i=0;i<80;i+)
8、temp->datai='O'4emp->row=NUM+1;system("cls');return(temp);)说明:a、定义LinkList指针变量*temp:LinkList*temp;b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;c、申请动态存储空间:head->next=(LinkList*)malloc(sizeof(LinkList);d、首行头指针的前驱指针为空:head->pre=NULL;首行指针:temp=head->next;首行指针的前驱指针也为空:temp->pre=NU
9、LL;定义没输入字符时文章长度为0:temp->length=O;初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i+4-)temp->datai='O'e、利用循环进行文本输入for(j=0;jvLINKNIT_SIZE;j+)控制一页for(i=0;iv80;i+)控制一行ch=getchar();/接收输入字符temp->datai=ch;/给temp指向的行赋值temp->length+;行中字符长度加1if(ch=#)NUM=j;break;/文章结束时,Num来记录整个文章的行数)在字符输入的过程中,如果在单行输入的字符
10、超过了80个字符,则需要以下操作:输入字符数大于80,重新分配空间建立下一行:temp->next=(LinkList*)malloc(sizeof(LinkList);给temp的前驱指针赋值:temp->next->pre=temp;temp指向当前行:temp=temp->next;将下一行初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i+)temp->datai=*0'记录整个文章的行数:temp->row=NUM+1;返回指向最后一行指针:returntemp;文本输入部分到此结束。2)PrintWord()文章显示
11、函数voidPrintWord()inti,j;LinkList*p;p=head->next;systemCls'*);printf(nnH);pritf(H|tprintf(',tt*piytf(A!t.printf(nn当前文章的内容是:n");for(j=0;j<=NUM&&p!=NULL;j+)for(i=0;(i<80)&&(p->datai)!=,#,;i+)printf("c”,p->datai);p=p->next;说明:a、定义文本行数变量j,每行字符数i:intij;b
12、、定义指针变量:LinkList*p;c、将指针p指向链表表头:p=head->next;d、利用循环输出链表中信息:for(j=0;j<=NUM&&p!=NULL;j+)=for(i=0;(i<80)&&(p->datai)!='#'i+)=printf("%c",p->datai);p=p->next;文本显示部分到此结束。(3)CountWord()文章内容统计函数voidCountWord()LinkList*temp;charch;intij,t;intWORD=0,word=0,
13、space=05num=0,sum=0;temp=head->next;for(j=0;j<=NUM;j+)for(i=0;(i<80)&&(temp->datai)!=#*;i+)(ch=temp->datai;if(ch>=,A,)&&(ch<=Z,)WORD+;elseif(ch>=,a,)&&(ch<='z,)word+;elseif(ch>=0,)&&(ch<='9')num+;elseif(ch='')space+
14、;)sum=WORD+word+num;)while(1)printf(”n");printf("n");printf(nn");printf(ntt*nH);prin;f("向i1文熹内套统;十子翥单''W城也7 printf("tt* printf(Htt* printf("tt* printf(ntt* printf("tt*7,7,7,%d n",WORD+word);%d n",num);%d n",space);%d n",sum);*5);7,7
15、,V17,文章中字母的个数:文章中数字的个数:文章中空格的个数:文章中所有字的个数:1 、退出返回主菜单printf(Htt* 2、直接退出本系统3*n“);printf(”tt 请选择:”);scanf(-cT,&t);if(t=1)system(',clsn);break;elseif(t=2)exit(0);elseprintf("tt对不起,无此功能!请回车重新选择L.n");printf(W);fflush(stdin);getchar();说明:a、定义指针变量temp:LinkList*temp;b、定义记录文本行数变量j,每行字符数i;C、定
16、义记录文本大写字母数、小写字母数、空格数、数字数和总字数的变量:intWORD=0,word=0,space=0,num=0,sum=0;d、将指针temp指向链表表头:temp=head->next;利用循环对链表中信息进行匹配判断,将大写字母数、小写字母数、空格数、数字数和总字数统计出来:for(j=0;j<=NUM;j+)<for(i=0;(i<80)&&(temp->datai)!=,#,;i+)<ch=temp->datai;if(ch>=,A,)&&(ch<='Z,)WORD+;elsei
17、f(ch>='a')&&(ch<='z,)word+;elseif(ch>='0')&&(ch<=,9,)num+;elseif(ch=*')space+;isum=WORD+word+num;e、本程序对统计项目设计了菜单。菜单的编写使用while语句进行循环操作。文本内容统计部分到此结束。(4)SearchWord()文章内容查找函数voidSearchWord(char*str1,LinkList*temp)charData20;inti,j,k=0,sum=0;int1=1;temp
18、=head->next;strcpy(Data,str1);for(i=0;i<=NUM;i+)for(j=0;jv80;j+)(if(temp->dataj)=Datak)k+;elseif(Datak!=,0,)j=j-k;k=0;)if(Datak=,O,)(sum+;j=j-k+1;printf("ttt第£次出现在第d行第%(列n",l,i+1,j);I+;k=0;continue;temp=temp->next;printf(nnttt字符串总共出现次数为:%dnn",sum);C=sum;N=i*80+j;说明:a、
19、定义一个数组,用来记录需要查找的字符内容:charData20;b、定义定义文本行数变量j,每行字符数i,记录字符出现的次数变量:inti,j,m=0.,sum=0;c、对形参中定义的指针变量进行操作,使其指向链表表头:temp=head->next;d、 使用拷贝函数,将形参中strl的值赋给Data:strcpy(Data,str1);e、 利用循环进行查找操作:for(i=0;iv=NUM;i+)/利用循环进行查找操作/(for(j=0;j<80;j+)if(temp->dataO)=Datak)k+;/*将输入的查找字符与链表中信息比较,找到第一个相同的字符/else
20、if(Datak!=,0,)卜卜k;/*从主串第卜k个位置重新查找7k=0;)if(Datak=,0')<sum+;/*此字符出现的次数加1j4k+1;/*j记录下该字符串出现的位置Vprintf("ttt第心次出现在第。/。6气境%4列J);I+;k=0;continue;)temp=temp->next;/*指向下一行“I文本内容查找部分到此结束,5) DeleteWord()文章内容删除函数voidDeleteWord(char*str2)<charData20;LinkList*temp,*term;inti,j,a5k5m5y5num;strcpy
21、(Data,str2);for(y=0;y<C;y+)num=80;k=O,m=O;temp=head;for(i=0;iv=NUM;i+)term=temp;temp=temp->next;for(j=0;j<80;j+)<if(temp->dataO)=Datak)k+;elseif(Datak!=,O,)j=j-k;k=O;if(Datak='O')(num=j;break;)if(num<80)break;4or(;i<=NUM;i+)(for(;j<80;j+)if(j+1<k)(term->data80-k
22、+num=temp->dataj+1;elsetemp->dataj-k4-1=temp->dataj+1;)term=temp;temp=temp->next;j=0;),说明:a、定义一个数组用来存储需要删除的字符或者字符串:charData20;b、定义指针变量:LinkList*temp、*term;c、定义整形变量用来控制行数、字符数:inti,j,k,m,y,num;d、使用拷贝函数讲形参中需要删除的字符或字符串赋值给已定义的数组:strcpy(Data,str2);f、使用循环进行删除操作:for(y=0;y<C;y+)num=80;k=O,m=O;
23、temp=head;for(i=0;iv=NUM;i+)/*使用循环进行删除操作/term=temp;temp=temp->next;for(j=0;j<80;j+)if(temp->dataj)=Datak)k+;elseif(Datak!='O')j=j-k;k=O;if(Datak=,O,)(num=j;break;if(num<80)break;)/*首先是使用循环查找到需要删除字符或者字符串的字符数以及字符或者字符串的位置,以便于删除*/for(;i<=NUM;i+)(for(;j<80;j+)(if(j+1<k)(term-
24、>data80-k+num=temp->dataj+1;/*删除的字符串不在最后一行,将下一行的字符(由temp指向)前移到前行/elsetemp->dataj-k+1=temp->dataj+1;/*当要删除的字符串在最后一行只要将最后一行的字符前移*/term=temp;temp=temp->next;/*在使用循环,从查找到的字符或者字符串开始进行删除,在一行删除完毕之后,转至下一行进行删除*/j=0;)文本内容删除部分到此完成。6) Bmenu()文章内容处理菜单函数voidBmenu(LinkList*temp)charstr120;charstr220
25、;intt;do/*利用dowhile循环来控制主菜单显示/printf(An11);printf("ntt*ri”printf(nttprintf(Attprintf(ntt*文章内容处理子菜单*、口”)printf ("tt*printf(ntt printf("tt printf(ntt printf(nttprintf(Htt*12345查找文章中的字符或者字符串 删除文章中的字符或者字符串 显示当前文章内容返回主菜单直接退出系统*、口")请选择*nn);* *nn);*n");*nn);*nn);*nn);scanf("%d
26、n,&t);if(t>5)|(t<1)printf (”tt对不起,无此功能!请回车重新选择!.n");printf(uttn);fflush(stdin);getchar();elseswitch (t)(case 1:system(HclsH); printf (Hnn);,rintf(nn|t* , printf(ntt*fn");碑*printf("nttt请输入您需要查找的字符或字符串:");getchar(); gets(strl);printf (nnn);SearchWord(str1 ,temp);prin tf(n
27、ntt按回车键继续 getchar();getchar();system("clsH);break;case 2:system(nclsn);printf (HnH);pri ntf("ntt*n")printf(Httprintf(Att *文章内容处理子菜单*、门”) 5);printf("nttt请输入您需要删除的字符或字符串:");getchar();gets(str2);printfCn");SearchWord(str2,temp);DeleteWord(str2);printf("ttt删除%s后的文章为:;s
28、tr2);PrintWord();printf(nntt按回车键继续getchar();getchar();system("clsn);break;case3:system(,clsH);*文printf(nnntt*printf(ntt*nH);文章内容处理子菜单*5);R炉r国(“跑2R必RRRR-T.-T.-1.-T.-T.-T.-1.-T.PrintWord();”);printf(nnntt按回车键继续getchar();getchar();system(,'clsn);break;)if(t=4)systemCls");break;)if(t=5)exi
29、t(O);)while(1);说明:用do-while语句来制作文章内容处理菜单,用switch语句来选择实现功能7) AboutWord()相关性息voidAboutWord()printf("nnnnnnnnn);printf(t*k'Uk'Uk'Uk'UkJUprintf”本系统由chevis制作部分功能则是仿照其他程序能力有限谢谢使用!printf(t*k'Uk!>kJU«<Gnk'UkJU-T.-t.-t.-T.-zT.-t.printf("n");(8)menu()主菜voidmen
30、u()(intt;LinkList*temp;doprintf("n");printf(',nn);printf(HnH);printf("tt*nM);fprintf代卜产卜jj葡翠的攵拿褊巍j-''''匹卜);printf(ntt*nM);)-JJJJJJJJJJ.1,PrintfCN舌菜整,一,.;'吸printf(”tt*n");printf(ntt*printf(Mtt*printf(ntt*printf(Att*printf(ntt*printf(Att*1、文章内容输入2、显示当前文章内容3、
31、文章内容统计子菜单4、文章内容处理子菜单5、程序相关6、退出文章编辑器:鬻相!心始露编白黑瀛谭袅,和:printf(',ttprintf("看输关相应数章:");喳scanf(,%d,5&t);if(t>6)|(t<1)(printf(”tt对不起,无此功能!请回车重新选择!.n“);printf(ntt");fflush(stdin);getchar();)elseswitch(t)(case 1:system("clsn);printf("n");temp=CreatWord();break;case
32、2:system(Hclsn);PrintWord();printf(An',);printf(An");););););););printf("ntt按回车键继续”);getchar();getchar();system(cls');break;case3:system(cls');CountWord();break;case4:system(“cls");Bmenu(temp);break;case5:system(cls');AboutWord();printf(“ntt按回车键继续”);getchar();getchar()
33、;system(“cls");break;if(t=6)break;)while(1);)说明:用do-while语句来制作文章内容处理菜单,用switch语句来选择实现功能。main。主函数voidmain()(head=(LinkList*)malloc(sizeof(LinkList);menu();说明:/先为head申请存储空间,然后创建指针变量temp,然后直接在主菜单函数中进行其他操作7三、上机调试上机调试过程中遇到的问题及解决方法:a)由于本程序的操作大部分都为经常使用的查找、删除,基本的算法及代码都可以通过查找资料得到,故没有出现多大的问题。错误主要是在于删除等子函数中复杂操作过程中出现的小问题。b)删除及查找过程中需要在子函数中定义一个数组变量,用来存储输入的信息,然后用来与链表中的信息进行比较以达到删除或者查找。另为达到将输入的信息赋值给子函数中定义的数组,特使用了strcpy()函数。c)为了将程序界面更加的完美,做了3个菜单。清屏函数使用system(“cis背景字体颜色编写
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年可调控辊型四辊液压轧机合作协议书
- 2022-2023学年广西玉林市容县四年级(上)期末数学试卷
- 新译林六年级英语上册教案(全册)
- 2025年临时工协议常用版(2篇)
- 2025年二手数控机床买卖合同(2篇)
- 2025年五年级下册语文教学工作总结样本(3篇)
- 2025年人事代理员工劳动合同常用版(4篇)
- 2025年仓储运输合同标准版本(4篇)
- 2025年互联网技术服务合同样本(三篇)
- 专题01 集合、逻辑用语与复数(解析版)
- 2022年湖南公务员考试《申论》真题套卷(乡镇卷)2
- 【薪酬】国有企业中长期股权激励课件
- 《新闻摄影教程(第五版)》第三章 新闻摄影工作者的职责与素养
- 学前儿童行为观察第一章观察概述课件
- 化学品防范说明编码
- 高温超高压煤气发电工程技术方案
- 帕金森病(英文版)课件
- 大学普通化学(第七版)课后答案
- 玉米栽培技术(培训)
- 化工企业三违清单不安全安全行为清单
- 解析贝壳找房商业模式
评论
0/150
提交评论