文本编辑器上机实习报告_第1页
文本编辑器上机实习报告_第2页
文本编辑器上机实习报告_第3页
文本编辑器上机实习报告_第4页
文本编辑器上机实习报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

文本编辑器上机实习汇报郑超00901090问题需求分析:此次期中上机实习作业要求设计并实现一个简单文本编辑器,最少实现以下功效:1.把指定文件读入编辑器2.可经过键盘输入在编辑器中对文件进行编辑)3..将编辑内容存入指定文件5.把字符串或文本块插入编辑区指定位置)6.删除编辑区里字符串或文本块7.在编辑区里查找指定字符串)8.将文本里“字符串1”替换为“字符串2“。在动手之前,先对该问题需求进行分析:因为所学知识有限加上上机时间有限,而上过计算概论课程之前没有任何编程基础,想要将文本编辑器做成友好,交互式环境,实在是过于困难。也试过翻了一些C++关于书籍,尝试着有“mfc”设计图形界面,但因为重头来学过于复杂,而且尝试过程中频频不能达成效果,最终作罢,还是选择了传统C语言运行界面,经过case实现命令。所以,在交互性和美观上,可能本编译器就逊色不少了。尽管如此,我还是力争功效稳定和完备,以达成作业基本要求。因为运行环境简单,程序运行速度不是问题,而易用性也在我考虑范围之内,尽可能在C最基本环境下提供最便捷操作,在提醒输入方面给予尽可能多指令,对于常见错误,也尽可能给予考虑并提供帮助。抽象数据结类型设计及模块功效划分最想想到数据类型看到此问题我最先想到数据结构就是链表,而采取单链表和双链表处理此题并没有任何实质性区分,因为之前在第一次作业中做过双链表抽象数据类型,所方便第一时间决定用双链表稍加修改进行编译。以下给出双链表部分基本抽象数据类型,均进行了数据封装:结点说明:structDoubleNode{intinfo;/*info统计结点信息*/intline,raw;/*lineraw分别统计结点储存信息在文本中行列位置*/PDoubleNodellink,rlink;/*双链表中左右结点*/};双链表说明:structDoublelist{/*双链表结构begin指向头结点end指向末结点PDoubleNodebegin,end;}另外,当然还定义了指向对应结构指针类型。分别为PdoubleNode,LinkList。在编写过程中,为了方便,在数据结构申明同时我也定义了一些会重复使用外部变量。读入文本文件每个字符实际上相当于有序小段,段与段之间用链表方式串接起来。这么好处是:任意字符串操作,实质上是对链表指针链接进行修改。编辑器中,仅需使用部分双链表抽象数据类型,如创建空链表,判断链表是否为空,找出对应值结点,在指定结点后面插入要求值新结点,求某节点前驱(后缀结点),在表头(表尾)插入结点,等等。算法与数据结构设计本程序基本可分为两部分,除了上述抽象数据类型,还有就是实现编辑器基本功效各个函数,建立抽象数据类型正是为了较方便地写出这些函数,而怎样实现这些也才是程序关键。首先,必须有读入指定文本函数Readtxt,该函数应该能够将与位于C文件同一个文件夹文本文件(.txt后缀)读入,之后才有对文本各种编辑操作。这里考虑调用函数后手动输入文本名称从而读入文本,而函数返回值1和0则分别表示是否成功读入了文本文件,对于读入各种错误,如文本名输入犯错,没有输入后缀名,没有在该文件夹找到对应文本等问题都给予回应和提醒。采取fopen函数在上学期计算概论教材中有包括,读入成功,即创建空链表,然后把文本内容经过抽象数据类型中表头插入不停送入链表中,实现读入。详细实现以下:intReadtxt(charfname[]){/*读入文本*/inti=0,c,m=1,n=1;PDoubleNodep=list->begin;if(fname==""){printf("文本名输入错误:请输入正确文本名!(以.txt结尾)\n");return0;}else{ fp=fopen(fname,"r"); if(fp==NULL){ printf("无法读取该文本!请确认文本位于C程序所在文件夹\n"); return0; } else{ printf("成功读取该本文!\n"); while((c=fgetc(fp))!=EOF){ if(c=='\n'){m++;n=0;} insertPost_list_end(list,c); ++i; list->end->line=m; list->end->raw=n; ++n; } /*printlist(list);测试用*/fclose(fp);return1;}}}然后,考虑到需要有一定互动行,必须使使用者能够看到对应文本,所以应有对应展现文本函数Printtxt,即将文本内容打印出来。该函数较易实现。经过链表指针不停右指有putchar输出字符即可:voidPrinttxt(inttxt){/*展现文本*/if(txt==1){PDoubleNodep=list->begin;while(p!=NULL){ putchar(p->info);p=p->rlink; }printf("\n");}elseprintf("请确认文件存在\n");}一样,对于文本应有对应保留文件函数,这是文本编辑器基本操作,实现作业要求中“.将编辑内容存入指定文件,以确保用户安全使用。这里考虑分两种情况,存到原文本中或另存为为新文本,后者还需要提供能命名要求。不论怎样,都只能以w方式。intSave_txt(charfname[]){/*保留文件*/inti=0;PDoubleNodep=list->begin;if(fname==""){printf("错误:请输入正确文件名!\n");return0;}else{ fp=fopen(fname,"w"); if(fp==NULL){ printf("错误:无法以该文件文件名保留文件!\n"); turn=0; }else{ printf("成功保留该文件!\n"); while(p!=NULL){ fputc(p->info,fp); p=p->rlink; } fclose(fp); return1; }}}以上三个为与文件相关函数,接下来就是实现对文本编辑函数。分别需要有查找指定字符串位置函数,删除指定字符串函数,替换指定字符串函数。因为包括算法实现,将其放在“算法精化与程序实现“中。算法精化与程序实现因为需要对文本编辑器编辑函数均包括找到并识别对应字符串功效,原理基本一样,所以在这里仅说明最复杂替换字符串函数Replace_String。该函数要求输入两个字符串(字符数组)string1和string2,运行后,在原本中查找string1并将其替换,替换成功时返回1,不然返回0。这里考虑替换原因,可能是输入了非字符串,或者文本中没有该字符串。对于后者,可用查找函数Find_string判断。前者,仅考虑没有输入任何字符情况。算法详细实现:用变量p来第一次统计字符起始位置,用变量q从该起始位置来统计字符串,不停右移,与指定字符串进行对比。若有不对应则跳出,将p右移,再开始移动q比较。假如匹配成功,则p指向是要替换字符串启示位置,所以原字符串删除后,用插入函数插入新字符串即可。详细以下:intReplace_String(charstring1[],charstring2[]){/*替换字符串函数*/inti,j=0,k=0,control=0,len=strlen(string1),line,raw,judge;judge=Find_string(string1);while(judge==1){PDoubleNodep=list->begin,q;if(string1[0]=='\0'){ return0; printf("错误:请输入字符串!\n");}else{while(p!=NULL){ q=p; while((q!=NULL)&&(string1[j]!='\0')){ if(q->info!=string1[j]){ control=1; break; } ++j; q=q->rlink; } if(control==0){ line=p->line;raw=p->raw; if(p->llink==NULL){ for(i=0;i<len;++i){ list->begin=p->rlink; p->rlink->llink=NULL; free(p); p=list->begin;} } else{ p=p->llink; q=p->rlink; for(i=0;i<len;++i){ if(q->rlink!=NULL){ q->rlink->llink=p; p->rlink=q->rlink; } else{ p->rlink=NULL; } free(q); q=p->rlink;} } if(line==1&&raw==1){ Insert_string(1,0,string2); printf("已替换成功\n");} else{ Insert_string(p->line,p->raw,string2); printf("已替换成功\n");} } control=0; j=0; p=p->rlink; return1;} }return1;}}程序调试与计算结果分析与使用说明完成基本函数后,即需要对程序进行调试。编辑完主函数编辑和界面基本设计,后,即对程序进行了深入试验,以检验函数功效是否有缺点。运行后,程序基本界面以下(已载入一篇文档):首先应输入需要读入文本名以读取进行编辑文本,然后将文本打印出来。使用查找字符串函数,查找单词“April”:使用替换字符串,将”1984“替换为”“:使用删除字符串功效,将文章第一句“ItwasabrightcolddayinApril,“删除:使用插入字符串函数,在第1行1列插入“JOKE!!!“:存放文档:可选择另存为:在C文件文件夹下,创建了新文本“1984.txt“在调试过程中,实际上是整个程序花费时间最长过程。起初是纠正代码中各种错误,然后是发觉功效出现问题,不能输出满足要求结果。最终,经过漫长试验和检验得以有了较满意最终止果。自我分析和评价本编译器即使没有采取图形直接交互式环境,已大大降低了难度,不过也需实现各种输入判断,必须具备一定稳定性。这是程序难度所在。几个函数实现,思想上即使不是很困难,不过再细节方面琢磨却花费了我很多时间,一度一整天调试都得不到正确结果,这一重复过程也磨练了我对编程耐性与细心,更大大增加了我对C程序编译基本错误经验。在完成这次大作业同时,也加深了我对编程这一过程了解,思想和算法当然主要,是关键。但动手能力确实不能用算法精妙来补足必须有足够实践,才能最

温馨提示

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

评论

0/150

提交评论