用字符串实现一个简单的行编辑器.doc_第1页
用字符串实现一个简单的行编辑器.doc_第2页
用字符串实现一个简单的行编辑器.doc_第3页
用字符串实现一个简单的行编辑器.doc_第4页
用字符串实现一个简单的行编辑器.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

用字符串实现一个简单的行编辑器 学生姓名: 指导老师:肖增良 摘 要 本课程设计主要解决在文本编辑中,对行编辑的问题,通过字符串完善对文本的编辑,实现对文本的查找、替换、和修改数据。在本课程设计中,系统开发平台为Windows2000,程序设计语言为C语言,程序运行平台为Windws 98/2000/XP。在程序设计中采用了字符串的方法实现对简单的行编辑器。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在实际中解决问题。 关键词 程序设计;行编辑器; C语言; 1 引 言对于日常生活中的文本编辑来说,行编器是一个很重要的问题,文本的完善关系到文件做出的完美,决定了人们在编辑文本的时效率。一个好的用字符串实现的行编辑可以大大的提高人们办公效率。1.1 课题背景行编辑器是文本编辑器的一种,针对行进行编辑。现在看来当然非常地老式,这种编辑器起源于操作员还使用电传打字机的年代,也就是一个打印机连着键盘,因为没有显示器,也就无法在文档中移动光标。行编辑器只能从事最简单的输入输出。输入、编辑、文档显示并不能同步地进行。一般而言,用户无法直接输入文本,而只能在文本终端上通过简要的命令,对已有的文档进行添加或编写。命令和文本,以及编辑器的相应输出,会根据他们的输入顺序,从底部开始逐一显示。虽然命令一般会显示被修改的行,但如果要将行连同文档中的上下文显示,则需要另外单独的命令。现在常见的编辑器,都是通过移动光标,来选取要编辑的文本段落,与此不同的是,行编辑只能对“当前行”进行编辑。一般也可以在行内进行上下文匹配,或者选择特定行,以决定哪部分文档将被编辑或显示。当然,这些编辑每次都只能针对一行。行编辑器就只能一行一行的编辑,不能出错,一出错就得重来。因此我们用字符串来定义,可以增强行编辑器的应用,增强可读性,加快人们的编辑文本的效率,从而推进社会的发展。这就是其重要意义。1.2 课程设计目的数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的各种运算的实现算法。 生活中的例子,比如现在要做一个考试系统,要描述每个考生的信息,有姓名、性别、考号等,全部这些信息就构成一个小数据结构,每个考生有他自己的数据结构,这些结构要如何存放在计算机中,各个结构之间是什么关系,对整体需要哪些操作,比如查询、删除,怎样存储会使这样的操作效率更高,这些就是数据结构要解决的问题。如图1-1。字符串行编辑图1-1图1.1 实现的数据结构1.3课程设计内容本课程设计是用字符串实现一个简单的行编辑器,其中包括字符的按行录入、修改、替换、查询。如图1-2所示:行编辑器字符的录入字符的修改字符的替换字符的查询图1.2行编辑器功能框架图2 设计思路与方案2.1设计思路 栈是一种先进后出的线性表。它只允许在表的一端进行插入和删除元素,而在另一端不进行任何操作。比如假设栈为q=(a1,a2,an),那么a1就是栈低元素,an则是栈顶元素。栈中的元素是按照a1,a2,an的顺序进入的,出栈是可以按照这个次序依次退出。如图2-1a1,a2,an a1,a2,a3,an 进栈 图2-1 C栈元素进栈an,a2,a1 图2-2 C栈元素出栈后进入D栈 最后D栈出栈的元素序列是:a1,a2,an。与输入序列完全一致。2.2数据结构设计(还必须写详细些) 栈是一种先进后出的线性表,为了能按照原来的输入顺序输出元素,我在程序中设计了两个栈,第一个栈用来存储输入的字符,然后把第一个栈的元素出栈,并且把出栈的元素放入第二个栈中,这样就实现了出栈是元素的顺序和最开始输入的顺序是一致的了。首先,构造一个空栈函数InitStack(SqStack &S);然后设计输入函数push(SqStack &S,char e)和出栈函数pop(SqStack &S,char &e);在这两个函数里,我们通过顶指针的增加(*S.top+=e)和指针的减少来实现元素的进栈和出栈(e=*-S.top)。我们通过设计函数DestroyStack(SqStack &S)来清空栈中所有的元素,通过使用free()函数来释放*S.top的地址。通过函数PrintStack(SqStack &S)来输出显示输入的所有元素。3 详细实现3.1输入文本定义一个输入函数,显示“请输入字符串”,从而可以输入字符。3.2 编辑字符存储每一行的元素指向后一个节点的指针指向前一个节点的指针 编辑文本确定此行是否被删除的标志NY图3.1 编辑文本流程图3.3修改字符本操作的流程图如下所示:输入要查找的文档查找该文档在链表中的位置判断位置是否为0NY输出文档的位置信息输出没有该文档图3-2 文档的显示流程图3.4输出文本调用单链表中的Find函数,查找该文件内容在单链表中的位置,如果位置异常,输出提示信息”没有该文件”,否则,调用单链表中的Get函数,找出该文件并输出。操作流程图如下所示:输入文本查找该文件在链表中的位置判断位置是否为0输出没有该文本输出文本YN图3-3输出文本流程图4 运行环境与结果4.1运行环境在本课程设计中,系统开发平台为Windows2000,程序设计语言为Visual C+6.0,程序的运行环境为Visual C+ 6.0。Visual C+一般分为三个版本:学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种,在本课程设计中,以Visual C+ 6.0为编程环境。Microsoft Visual C+ 6.0是Microsoft公司的Microsoft Visual Studio 6.0开发工具箱中的一个C+程序开发包。Visual C+包中除包括C+编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。 Visual C+从最早期的1.0版本,发展到最新的7.0版本,Visual C+已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。最新的7.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。Visual C+ 6.0是Microsoft公司推出的目前使用最广泛的基于Windows平台的可视化编程环境。Visual C+ 6.0是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好,完全课扩展以及具有强大的Internet支持,因而在各种C+语言开发工具中脱颖而出,成为目前最为流行的C+语言集成开发环境。Visual C+ 6.0秉承Visual C+以前版本的优异特性,为用户提供了一套良好的可视化开发环境:主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等等。用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文件、编译、链接、运行、调试应用程序。4.2运行结果(1)在程序开始运行时,就会显示出提示语,提示“请输入字符串” ,如下图所示。.图4-1 显示最初运行的页面(2)输入字符串。结果如下图所示:图4-2输入字符串(3)当输入#则可以消去一个字符,如图所示图4-3 输入#后的运行图(3)当输入则可以消去一个字符,如图所示图4-4输入后的运行图(5) 提示语“Press any key to continue” 退出程序。如下图12所示:图4-5 退出程序5 结束语 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处在。回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,今后一定好好学习.。与其临渊羡鱼,不如退而结网。这次数据结构课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在勇气和毅力下是抬不了头的。从做这个数据结构课程设计开始,无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。我完成了这次数据结构课程设计,不过这只是我学习路上的驿站,语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。在今后的日子里,我会好好学习专业知识,不断进步。 参考文献1麻志毅, (原书第4版) 机械工业出版社 2002 2 徐宝文 李志 谭浩强C 程序设计语言(第二版新版) C+程序设计 机械工业出版社 20043 Pascal之父Niklaus Wirth 算法 + 数据结构 = 程序 科学出版社 20014苏运霖 数据结构与算法 中南工业大学出版社 20025 Shaffer 数据结构与算法分析(C+版、JAVA版) 电子工业出版社 19996粟利民,孙强. 如何用VC+和Visual Foxpro进行ActiveX数据通讯. 7谭浩强.计算机C语言教程M. 北京:电子工业出版,20018 陈向阳.网络工程规划与设计M. 北京:清华大学出版社,2007附录:源程序代码/ 程序功能:用字符串实现一个简单的编辑器/ 程序作者:刘慧/ 最后修改日期:2009-3-12#include #define pp printf#define ss scanf#define D “%c”main()int i=0,j;char a250=0;char c,*last; ai=n;last=a;i+;pp(“the tag is n”);while(c=getchar()!=) If(c= =#) *(last)=0; last=last 1; else if (c= =) while(*(last)!=n) *(last)=0; *(last+1)=0; last=last -1; else if(c!=#&c!=) ai=c; last=last+1;getch();i+;pp(“the result is:n”);for(j=0;ji;j+) if(aj!=0) pp(D,aj);getch();#include /* For _MAX_PATH definition */#include #include #include #include #define STACK_IN99v_SIZE 100#define STACKINCREMENT 10struct SqStackchar *base;char *top;int stacksize;void InitStack(SqStack &S)S.base=(char*)malloc(STACK_IN99v_SIZE *sizeof(char);if (!S.base)exit(1);S.top=S.base;S.stacksize=STACK_IN99v_SIZE;void push(SqStack &S,char e)if(S.top-S.base=S.stacksize)S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char);if (!S.base)exit(1);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;char pop(SqStack &S,char &e)if (S.top=S.base) return false;

温馨提示

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

评论

0/150

提交评论