字符串实现一个简单的行编辑器(数据结构课程设计参考样本)
用字符串实现一个简单的行编辑器学生姓名:OOO 指导老师:XXX摘要:本课程设计主要解决在文本编辑中,对行编辑的问题,通过字符串完善对文本的编辑,实现对文本的查找、替换、和修改数据。
在本课程设计中,系统开发平台为Windows2000,程序设计语言为C语言,程序运行平台为Windws 98/2000/XP。
在程序设计中采用了字符串的方法实现对简单的行编辑器。
程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在实际中解决问题。
关键词:程序设计;行编辑器;C语言;1 引言对于日常生活中的文本编辑来说,行编器是一个很重要的问题,文本的完善关系到文件做出的完美,决定了人们在编辑文本的时效率。
一个好的用字符串实现的行编辑可以大大的提高人们办公效率。
1.1 课题背景行编辑器是文本编辑器的一种,针对行进行编辑。
现在看来当然非常地老式,这种编辑器起源于操作员还使用电传打字机的年代,也就是一个打印机连着键盘,因为没有显示器,也就无法在文档中移动光标。
行编辑器只能从事最简单的输入输出。
输入、编辑、文档显示并不能同步地进行。
一般而言,用户无法直接输入文本,而只能在文本终端上通过简要的命令,对已有的文档进行添加或编写。
命令和文本,以及编辑器的相应输出,会根据他们的输入顺序,从底部开始逐一显示。
虽然命令一般会显示被修改的行,但如果要将行连同文档中的上下文显示,则需要另外单独的命令。
现在常见的编辑器,都是通过移动光标,来选取要编辑的文本段落,与此不同的是,行编辑只能对“当前行”进行编辑。
一般也可以在行内进行上下文匹配,或者选择特定行,以决定哪部分文档将被编辑或显示。
当然,这些编辑每次都只能针对一行。
行编辑器就只能一行一行的编辑,不能出错,一出错就得重来。
因此我们用字符串来定义,可以增强行编辑器的应用,增强可读性,加快人们的编辑文本的效率,从而推进社会的发展。
这就是其重要意义。
1.2 课程设计目的数据结构是在整个计算机科学与技术领域上广泛被使用的术语。
它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。
数据结构有逻辑上的数据结构和物理上的数据结构之分。
逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。
数据结构是数据存在的形式。
数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。
数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的各种运算的实现算法。
生活中的例子,比如现在要做一个考试系统,要描述每个考生的信息,有姓名、性别、考号等,全部这些信息就构成一个小数据结构,每个考生有他自己的数据结构,这些结构要如何存放在计算机中,各个结构之间是什么关系,对整体需要哪些操作,比如查询、删除,怎样存储会使这样的操作效率更高,这些就是数据结构要解决的问题。
如图1-1。
图1.1 实现的数据结构1.3课程设计内容本课程设计是用字符串实现一个简单的行编辑器,其中包括字符的按行录入、修改、替换、查询。
如图1-2所示:图1.2行编辑器功能框架图2 设计思路与方案2.1设计思路栈是一种先进后出的线性表。
它只允许在表的一端进行插入和删除元素,而在另一端不进行任何操作。
比如假设栈为q=(a1,a2,…an),那么a1就是栈低元素,an则是栈顶元素。
栈中的元素是按照a1,a2,…an的顺序进入的,出栈是可以按照这个次序依次退出。
如图2-1图2-1 C栈元素进栈图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 编辑字符图3.1 编辑文本流程图3.3修改字符本操作的流程图如下所示:图3-2 文档的显示流程图3.4输出文本调用单链表中的Find函数,查找该文件内容在单链表中的位置,如果位置异常,输出提示信息”没有该文件”,否则,调用单链表中的Get函数,找出该文件并输出。
操作流程图如下所示:图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)在程序开始运行时,就会显示出提示语,提示“请输入字符串”,如下图所示。
.(2)输入字符串。
结果如下图所示:图4-2输入字符串(3)当输入#则可以消去一个字符,如图所示图4-3 输入#后的运行图(3)当输入@则可以消去一个字符,如图所示图4-4输入@后的运行图(5)提示语“Press any key to continue”退出程序。
如下图12所示:图4-5 退出程序5 结束语课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处在。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,今后一定好好学习.。
与其临渊羡鱼,不如退而结网。
这次数据结构课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在勇气和毅力下是抬不了头的。
从做这个数据结构课程设计开始,无论遇到什么困难,我都没有一丝的放弃的念头。
出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。
我完成了这次数据结构课程设计,不过这只是我学习路上的驿站,语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。
在今后的日子里,我会好好学习专业知识,不断进步。
参考文献[1] 麻志毅, <C语言解析教程>(原书第4版) 机械工业出版社2002[2] 徐宝文李志谭浩强《C 程序设计语言》(第二版·新版) C++程序设计机械工业出版社2004[3] Pascal之父Niklaus Wirth 《算法+ 数据结构= 程序》科学出版社2001[4] 苏运霖《数据结构与算法》中南工业大学出版社2002[5] Shaffer 《数据结构与算法分析》(C++版、JA V A版) 电子工业出版社1999[6]粟利民,孙强.如何用VC++和Visual Foxpro进行ActiveX数据通讯.[7]谭浩强.计算机C语言教程[M]. 北京:电子工业出版,2001[8] 陈向阳.网络工程规划与设计[M]. 北京:清华大学出版社,2007附录:源程序代码// 程序功能:用字符串实现一个简单的编辑器// 程序作者:刘慧// 最后修改日期:2009-3-12#include <stdio.h>#define pp printf#define ss scanf#define D “%c”main(){int i=0,j;char a[250]={…\0‟};char c,*last;a[i]=‟\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!=‟@‟){a[i]=c;last=last+1;getch();i++;}}pp(“the result is:\n”);for(j=0;j<i;j++)if(a[j]!=‟0‟) {pp(D,a[j]);}getch();}#include <stdlib.h> /* For _MAX_PATH definition */ #include <stdio.h>#include <malloc.h>#include <string.h>#include <conio.h>#define STACK_IN99v_SIZE 100#define STACKINCREMENT 10struct SqStack{char *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;e=*--S.top;return e;}void ClearStack(SqStack &S) {S.top=S.base;}void DestroyStack(SqStack &S) {free(S.base);S.top=S.base;}bool StackEmpty(SqStack &S) {if (S.top==S.base)return true;return false;}/*void PrintStack(SqStack &S) {char e;while (!StackEmpty(S)){pop(S,e);printf("%d",e);}}*/void main(){char ch,e;SqStack S,D;InitStack(S);InitStack(D);ch=getchar();while (ch!=EOF){while(ch!=EOF&&ch!='\n') {switch(ch){case'#':pop(S,e);break;case'@':ClearStack(S);break; default:push(S,ch);break;}ch=getchar();}while (!StackEmpty(S)){e=pop(S,e);push (D,e);}while (!StackEmpty(D)) {e=pop(D,e);printf("%c",e);}ClearStack(S);if(ch!=EOF)ch=getchar();}DestroyStack(S);}。
数据结构课程设计文本编辑器
山东理工大学计算机学院课程设计(数据结构)班级计科0906姓名赵利强学号0911011192指导教师孙守卿二○一一年一月二十日课程设计任务书及成绩评定课题名称文本编辑Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
2、设计题目要求:文章编辑功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一一年一月二十一日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计………………………………………………………第四章详细设计………………………………………………………第五章运行与测试……………………………………………………第六章总结与心得……………………………………………………参考文献………………………………………………………………第一章概述在这次课程设计中我选的题目是文本编辑,文本编辑几乎是每个使用电脑的人都会遇到的问题,特别是网络小说作家们。
数据结构课程设计--简易文本编辑器
课程设计说明书课程名称:数据结构课程设计专业:电子信息科学与技术班级:2012-1 设计人:山东科技大学2015年 7 月 11 日目录1需求分析说明 (2)1.1主函数模块 (2)1.2菜单显示及输出子模块 (2)1.3查找功能子模块 (2)1.4替换功能子模块 (2)1.5插入功能子模块 (3)1.6块移动功能模块 (3)1.7删除功能模块 (3)1.8读盘功能模块 (3)1.9存盘功能模块 (3)1.10测试数据 (3)2概要设计说明 (4)2.1设计思想 (4)2.2模块调用图 (4)2.3程序代码简介 (4)3详细设计说明 (7)3.1主函数模块 (7)3.2菜单显示及输出子模块 (7)3.3查找功能子模块 (7)3.4替换子模块 (9)3.5插入子模块 (10)3.6块移动模块 (11)3.7删除模块 (12)3.8读盘功能模块 (13)3.9存盘功能模块 (15)3.10流程图 (16)4调试分析 (17)4.1遇到的问题 (17)4.2测试结果 (18)5用户使用说明 (22)6课程设计总结 (24)1需求分析说明简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C 语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。
基本功能如下:(1)界面友好,易与操作。
采用菜单或其它人机对话方式进行选择。
(2)能正确打开所键入的文本路径,并能够读取相应文本信息。
(3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作。
(4)能够正确对修改后的文本内容存盘。
(5)正确显示文本总行数。
以下是各功能模块的功能描述:1.1主函数模块主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。
1.2菜单显示及输出子模块菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。
简单的行编辑器
计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:简单的行编辑器姓名:学号:专业班级:软件工程软件102 系(院):计算机工程学院设计时间:设计地点:软件工程实验室、教室<2>用户可从键盘上输入字符,以*结尾表示输入字符结束,界面上会输出用户输入的字符,以及行编辑的功能选择项。
(如输入如下字符beijing huan ying ni *)<3>输入选择1,则依次输出:字母个数:17数字个数:0空格个数:4字符总数:21是否继续使用(Y/N):<4.1>选择Y,则出现行编辑器的功能选择,<4.2>如果第三步结束选择N,则输出**********谢谢使用**********<,再次需要进行行编辑器功能选择:输入选择2;则输出“请输入要统计的某一字符”提示用户输入要查找的字符假如输入i;则输出:i在文章中出现次数为:4;是否继续使用(Y/N)<**********谢谢使用**********<则输出行编辑器的功能选择项目;选择3;输出“请输入要删除子串的起始位置和长度:”提示用户输入,如果输入0 7输出“删除某一子串后:”huan ying ni**********谢谢使用**********<5>其他字符测试;例如用户输入:beijing BEIJING 520*输出字母个数:14数字个数:3空格个数:2字符总数:19统计字符i出现次数为2;删除从8号位器长度为7的字串后输出字符为beijing 520五用户手册1.运行程序,首先出现主界面。
主界面首行显示“欢迎使用文本编辑器”,输出提示信息“请输入要编辑的字符”,然后界面显示用户输入的字符。
然后主界面文本编辑器的功能菜单,功能菜单包括三个选项:选项一:统计字数,选择该项可进字数统计,当用户输入字符结束后,选择功能选项一,主界面回自动统计各字符数,然后输出。
2;选项二:统计出现次数,选择该项可进行对文章中某一字符出现字数的统计,当用户选择功能二时,主界面回输出提示信息,提示用户输入要统计的字符,用户可从键盘任意输入字符,以回车键结束。
数据结构文本编辑器
数据结构课程设计报告一.需求分析1.题目及要求名称:简单的文本编辑器内容:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行。
要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一字符或者子串,并将后面的字符前移。
(4)插入某一字符或者子串。
(5)查找某一字符或者子串。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章。
通过题目及其要求可知,本程序应实现以下功能:(1)文章内容的输入:包括字母、标点符号、数字等;(2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以及文章所有字数的个数的统计;(3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作,其中在查找的过程中统计出该字符或字符串在文章中出现的次数;2.问题分析本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。
对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。
简单行编辑器 数据结构 课程设计
简单行编辑器数据结构课程设计概述:本文旨在设计一种简单的行编辑器,以满足基本的文本编辑需求。
行编辑器是一种常见的文本编辑工具,它允许用户在文本中进行插入、删除、挪移光标等操作。
为了实现这一目标,我们将采用数据结构来管理文本的存储和操作。
1. 数据结构设计:1.1 文本存储:我们可以使用链表作为文本的基本数据结构,每一个节点存储一个字符。
链表的每一个节点包含一个字符和指向下一个节点的指针。
这样的设计可以方便地进行插入和删除操作,同时保持文本的顺序。
1.2 光标位置:光标的位置可以用一个指针指向链表中的某个节点。
这个指针可以指向一个字符之前、之后或者字符本身的位置。
通过挪移光标指针,用户可以在文本中进行插入、删除和挪移操作。
2. 功能实现:2.1 插入操作:用户可以在光标当前位置插入一个字符。
插入操作包括以下步骤:- 创建一个新节点,存储要插入的字符。
- 将新节点插入到光标所在节点的前面或者后面,更新链表的指针。
2.2 删除操作:用户可以删除光标当前位置的字符。
删除操作包括以下步骤:- 找到光标所在节点。
- 更新链表的指针,将光标所在节点从链表中移除。
2.3 光标挪移操作:用户可以通过挪移光标来改变插入和删除操作的位置。
光标挪移操作包括以下步骤:- 根据用户输入的指令,将光标指针向前或者向后挪移一个节点。
2.4 文本显示:用户可以查看当前编辑的文本内容。
通过遍历链表,将字符挨次输出即可。
3. 用户界面设计:为了方便用户操作,我们可以设计一个简单的用户界面,包括以下组件:- 文本显示区域:显示当前编辑的文本内容。
- 光标位置指示器:显示光标当前位置。
- 命令输入框:接收用户输入的命令。
4. 实例演示:假设用户输入以下命令序列:- 插入字符 'A':光标指向开头,文本变为 "A"。
- 插入字符 'B':光标指向 'A' 后面,文本变为 "AB"。
简单行编辑系统课程设计
cprintf("%c",179);
}
for(i=1;i<=11;i++)
{
gotoxy(46+i,2);
if(value==0) value=300; /*此value为局部变量*/
{
case 0:gotoxy(22,3); cprintf(" Open "); break;
case 1:gotoxy(22,4); cprintf(" Save "); break;
case 2:gotoxy(22,5); cprintf(" Exit "); break;
{
case 0:gotoxy(47,3); cprintf(" del "); break;
case 1:gotoxy(47,4); cprintf(" insert "); break;
{
gotoxy(21,1+i);
cprintf("%c",179); /*窗口内文本的输出函数,在窗口左边输出 | */
gotoxy(32,1+i);
cprintf("%c",179); /*窗口内文本的输出函数,在窗口右边输出 | */
gotoxy(47,3); cprintf(" del ");
gotoxy(47,4); cprintf(" insert ");
gotoxy(47,5); cprintf(" change ");
}
数据结构-课程设计--简易文本编辑器
《数据结构》课程设计班级: 10计本2班姓名:邓寅森学号: 2010305202指导教师:杨老师完成日期: 2011年12月计算机科学与技术系课程设计评分表课程名称: 数据结构 简易文本编辑器教师签名:日期:一、需求分析1.1 问题描述传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。
计算机信息管理为人们的生活、工作提供了方便,提高了效率。
“简易文本编辑器”是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。
1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本;(2)查询文本中满足要求的信息;(3)插入新的信息到文本中;(4)删除不再需要的文本信息;(5) 查看所有的文本信息。
二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计为了实现简易文本编辑器的各项功能,设计了一个含有多个菜单项的主控菜单模块以操作系统的各项功能,以方便用户使用系统。
系统进入菜单运行界面如图所示:简易文本编辑器主菜单2.2 数据结构设计系统采用线性表的顺序存储结构表示和存储“简易文本编辑器”中的信息。
实现文本的输入,删除,插入,查找,显示功能。
2.3 系统功能设计运行程序,提示进入菜单,按“回车键”进入主菜单,再可以在主菜单上进行各项操作。
每次进入菜单,选择“1键”新建文本,然后才可以进行其他操作,或者按“0键”选择退出。
三、模块设计3.1 模块设计系统主要包含主程序模块和其它操作模块。
其调用关系如图所示。
模块调用示意图3.2 系统子模块及其功能设计本系统共设计了16个子模块,各程序的函数名及功能说明如下:1、/*由模式串nextval值*/void GetNextval(SqVString T,int nextval[])2、/*模式匹配KMP算法*/int KMPIndex(SqVString S,int pos,int next[],SqVString T)3、/*初始化串*/void InitString(SqVString *S,char *str)4、/*串插入*/int StrInsert(SqVString *S,int pos,SqVString T)5、/*串删除*/int StrDelete(SqVString *S,int pos,int len)6、/*求子串*/int SubStr(SqVString S,int pos,int len,SqVString *T)7、/*串连接*/int Concat(SqVString *S,SqVString T)8、/*串赋值*/int StrAssign(SqVString *S,char *value)9、void InputString() //新建10、void DeleteString()//删除11、void DeleteSubstring()//删除12、void InsertSubstring()//查找13、void DisplayString()//显示14、void cd()//进入界面15、void ts()//主菜单16、void tc()//退出3.3 系统模块之间的调用关系系统的16个子模块之间的主要调用关系所示:系统函数调用关系图四、详细设计4.1 数据结构设计系统采用线性表的顺序存储结构存储通讯录信息。
数据结构课程设计之文本编辑器
##大学数据结构课程设计报告题目:简易文本编辑器院(系):计算机工程学院学生姓名:班级:学号:____起迄日期: 2011年6月20日至2011年6月30日指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:简易文本编辑器主要是针对文字编辑处理,对于如何编辑一个简易文本编辑器程序我们可以利用线性表示实现其功能,线性表便于插入删除查找功能,而文本编辑器需要用到这些功能,因此可以利用线性表实现。
对于文本编辑器应该具有插入、删除、查找等功能,并且可以显示所有输入数据,可正确存盘、取盘,正确显示编辑的文字长度。
2.基本功能:简易文本编辑器应该具有的功能:图形菜单界面:位置查找:数据查找:显示所有输入数据:插入:删除文本信息:可正确存盘、取盘:正确显示长度:3.输入输出:输入数据,数据类型为整形,且输入的字符或数字不多于100个,输出为输出输入的数据,输出输入数据的长度,输出插入元素及插入后的数据,输出查找元素的,输出的数据均为整形。
二、概要设计1.设计思路:首先构造一个线性表, 然后利用线性表的存储结构顺序存储方式,实现文本的编辑添加查找删除.2.数据结构设计:程序采取了线性结构利用顺序存储的方法,采用该结构的原因是线性表利于存储、插入、删除、查找、修改等功能,使用它可以使程序运行简单方便。
定义程序中用到的抽象数据类型;抽象数据类型线性表的定义如下:ADT SqList{数据对象:D={ai | ai∈data,i=1,2,3……,n,n≥0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3,……,n}基本操作:InitList(*L)操作结果:构造一个空的线性表L。
GetLength(L)初始条件:线性表L已存在。
操作结果:返回L中数据元素的个数。
GetElem( L, i,*e)初始条件:线性表L已存在,1≤i≤L.Length.操作结果:查找指定的某元素i,并将值赋给e,用e 输出。
C语言实现简易文本编译器
C语言实现简易文本编译器数据结构课程设计之简易文本编译器(C语言实现)需求分析(1)具有图形菜单界面:显示实时年份,日期,星期及时间(2)查找:查找文本中的字符串,显示其出现的行数,列数及总共出现次数替换(等长,不等长):对文本中的文本实现等长及不等长替换插入(插串,文本块的插入):插入一行或在具体行号列号处插入文本块移动(行块,列块移动):向下移动一行,向上移动一行,具体行号列号处向左移动或向右移动删除:删除一行,删除莫一行,莫列,定长的内容(3)可正确存盘、取盘;:可读取,保存文本;(4)正确显示总行数。
(行数不少于5行,每行字符数不少于80个字符)采用的数据结构1:采用的逻辑结构文本编辑器主要是针对文本进行编辑,文本的操作就是对字符的操作。
文本编辑器可以从行、列两个方向进行编辑。
每一行可以看成一个线性表,线性表是一种线性结构,线性结构的特点是数据元素之间为线性关系,据元素“一个接一个的排列”。
在一个线性表中数据元素的类型是相同的,由于每一行可以存储的最大字数是相同的,行方向所有线性表的最大长度可以设置成相同的。
行与行之间的关系也可以看成一个线性表。
2.采用的存储结构线性表的存储分为两种:顺序存储和链式存储。
顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称为顺序表。
在程序设计语言中,一维数组在内存中占用的存储空间就是一组连续的存储区域,因此,用一维数组来表示顺序表的数据存储区域是再合适不过的。
链式存储是通过-组任意的存储单元来存储线性表中的数据元素的,为建立数据元系之间的线性关系对每个数据元素除了存放数据元素自身的信息之外,还需要和一起存放其后继或前驱所在的存储单元的地址,这两部分信息组成一个“结点”,每个元素都如此。
存放数据元素信息的称为数据域,存放其前驱或后继地址的称为指针域。
只有一个存储单元地址的为单链表,有两个存储单元地址的为双链表。
考虑到实际的功能需求,每行的线性表可以用顺序存储方式,每个字符是一个节点。
字符串文本编辑机器
#include<stdio.h>char z;FILE *wenben;FILE *fp;void tukuang(){int i;for(i=0;i<=20;i++)printf("*");printf("\n");}void wen_zi_xian_shi(){printf(" 欢迎使用本编辑器 ");}void cha_zhao(char a[],char b)//在a中查找输入的b{int i,k=0;for(i=0;a[i]!="\0";i++){if(b==a[i])k++;printf("该字符串文本中所查找字符串个数为:\n");printf("%d\n,k");}if(a[i]=="/0"&&k==0)printf("原字符文本中没有找到要查的字符串");}void ti_huan_yuan_zi_fu_chuan(char a[],char b,char c)//在a[i]中:用C把B替换掉{int i,j;for(i=0;a[i]!="/0";i++){if(a[i]==b)a[i]==c;}printf("处理后的结果为:");for(j=0;a[j]!="/0";j++)printf("%c",a[j]);printf("\n");}int zi_fu_chuan_jian_qie(char a[],char b)//在a[i]中:用Z把b的内容装着,并把此a[i]用后一个字符串覆盖、删除{int i,t,j;for(i=0;a[i]!="/0”;i++)if(b==a[i]){t=a[i];for(;a[i]!="/0";i++)a[i]=a[i+1];}printf("The result is:\n");for(j=0;a[j]!="/0";j++)printf("%c",a[j]);return (z);}int zi_fu_chuan_fu_zhi(char a[],char b,char c)//在a[i]中:用c把b的内容装着{int i;for(i=0;a[i]!="/0";i++)if(a[i]==b)c=b;return (c);}void zi_fu_chuan_zhan_tie(char a[],char b,n)//在a[i]中:用a[n]把b的内容装着,并使a[n]后面的字符串后移一位{int i,j,k,t;for(i==0;a[i]!="/0";i++){if(n==i){t=a[n];a[n]=b;}}for(a[j]="/0";j>n;j--)a[j]=a[j-1];a[j]=t;for(k=j;a[k]!="/0";k++);a[k]="/0";}void zi_fu_chuan_ge_shi_hua(char a[])//把字符串a格式化{int i;for(i=0;a[i]!="/0";i++)a[i]="/0";printf("原文件为:\n");printf("%c\n",a[1]);}/*void wen_ben_wen_jian_de_bao_cun(char a[])//把a中的字符写入文件wenben中去{int i=0;while(a[i]!="/0"){wenben=fopen(a,"w");i++;}}void wen_ben_wen_jian_de_da_kai(int d)//根据d的数值的不同,分别以读、谢的方式打开文本{if(d>=100)fp=fopen(wenben,"r");elsefp=fopen(wenben,"w");}*/void zhu_cai_dan_0(char a[],char b, char d){int c;tukuang();wen_zi_xian_shi();tukuang();printf("****1、对字符串文本进行查找、替换 ****\n");printf("****2、字符串文本的剪切、复制、粘贴 ****\n");printf("****3、对字符串文本进行格式化 ****\n");printf("****4、对字符串文本进行保存、打开、新建****\n");printf("****5、直接退出编辑器 ****\n");tukuang();printf("请输入对当前你所需要完成的操作方式的序号:\n");scanf("%d",&c);if(c==1)zi_cai_dan_1(a,b);else if(c==2)zi_cai_dan_2(a,b,d);else if(c==3)zi_cai_dan_3(a);else if(c==4)zi_cai_dan_4();else if(a>4&&a<1)break;}void zi_cai_dan_1(char a[],char b)//第一个子菜单,运行完后调回主菜单{int c;tukuang();printf("**** 子菜单一: ****\n");tukuang();printf("****6、对字符串文本进行查找。
