字符串实现一个简单的行编辑器数据结构课程设计参考样本.docx
- 文档编号:6762696
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:14
- 大小:273.30KB
字符串实现一个简单的行编辑器数据结构课程设计参考样本.docx
《字符串实现一个简单的行编辑器数据结构课程设计参考样本.docx》由会员分享,可在线阅读,更多相关《字符串实现一个简单的行编辑器数据结构课程设计参考样本.docx(14页珍藏版)》请在冰点文库上搜索。
字符串实现一个简单的行编辑器数据结构课程设计参考样本
用字符串实现一个简单的行编辑器
学生姓名:
OOO指导老师:
XXX
摘要:
本课程设计主要解决在文本编辑中,对行编辑的问题,通过字符串完善对文本的编辑,实现对文本的查找、替换、和修改数据。
在本课程设计中,系统开发平台为Windows2000,程序设计语言为C语言,程序运行平台为Windws98/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-1
a1,a2,a3,…an进栈
图2-1C栈元素进栈
图2-2C栈元素出栈后进入D栈
最后D栈出栈的元素序列是:
a1,a2,…an。
与输入序列完全一致。
2.2数据结构设计(还必须写详细些)
栈是一种先进后出的线性表,为了能按照原来的输入顺序输出元素,我在程序中设计了两个栈,第一个栈用来存储输入的字符,然后把第一个栈的元素出栈,并且把出栈的元素放入第二个栈中,这样就实现了出栈是元素的顺序和最开始输入的顺序是一致的了。
首先,构造一个空栈函数InitStack(SqStack&S);然后设计输入函数push(SqStack&S,chare)和出栈函数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,程序设计语言为VisualC++6.0,程序的运行环境为VisualC++6.0。
VisualC++一般分为三个版本:
学习版、专业版和企业版,不同的版本适合于不同类型的应用开发。
实验中可以使用这三个版本的任意一种,在本课程设计中,以VisualC++6.0为编程环境。
MicrosoftVisualC++6.0是Microsoft公司的MicrosoftVisualStudio6.0开发工具箱中的一个C++程序开发包。
VisualC++包中除包括C++编译器外,还包括所有的库、例子和为创建Windows应用程序所需要的文档。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
VisualC++从最早期的1.0版本,发展到最新的7.0版本,VisualC++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。
最新的7.0版本在编译器、MFC类库、编辑器以及联机帮助系统等方面都比以前的版本做了较大改进。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VisualC++6.0是Microsoft公司推出的目前使用最广泛的基于Windows平台的可视化编程环境。
VisualC++6.0是在以往版本不断更新的基础上形成的,由于其功能强大,灵活性好,完全课扩展以及具有强大的Internet支持,因而在各种C++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。
VisualC++6.0秉承VisualC++以前版本的优异特性,为用户提供了一套良好的可视化开发环境:
主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等等。
用户可以在集成开发环境中创建工程、打开工程、建立、打开和编辑文件、编译、链接、运行、调试应用程序。
4.2运行结果
(1)在程序开始运行时,就会显示出提示语,提示“请输入字符串”,如下图所示。
.
图4-1显示最初运行的页面
(2)输入字符串。
结果如下图所示:
图4-2输入字符串
(3)当输入#则可以消去一个字符,如图所示
图4-3输入#后的运行图
(3)当输入@则可以消去一个字符,如图所示
图4-4输入@后的运行图
(5)提示语“Pressanykeytocontinue”退出程序。
如下图12所示:
图4-5退出程序
5结束语
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处在。
回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,今后一定好好学习.。
与其临渊羡鱼,不如退而结网。
这次数据结构课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在勇气和毅力下是抬不了头的。
从做这个数据结构课程设计开始,无论遇到什么困难,我都没有一丝的放弃的念头。
出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。
我完成了这次数据结构课程设计,不过这只是我学习路上的驿站,语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。
在今后的日子里,我会好好学习专业知识,不断进步。
参考文献
[1]麻志毅,
[2]徐宝文李志谭浩强《C程序设计语言》(第二版·新版)C++程序设计机械工业出版社2004
[3]Pascal之父NiklausWirth《算法+数据结构=程序》科学出版社2001
[4]苏运霖《数据结构与算法》中南工业大学出版社2002
[5]Shaffer《数据结构与算法分析》(C++版、JAVA版)电子工业出版社1999
[6]粟利民,孙强.如何用VC++和VisualFoxpro进行ActiveX数据通讯.
[7]谭浩强.计算机C语言教程[M].北京:
电子工业出版,2001
[8]陈向阳.网络工程规划与设计[M].北京:
清华大学出版社,2007
附录:
源程序代码
//程序功能:
用字符串实现一个简单的编辑器
//程序作者:
刘慧
//最后修改日期:
2009-3-12
#include
#defineppprintf
#definessscanf
#defineD“%c”
main()
{
inti=0,j;
chara[250]={‘\0’};
charc,*last;
a[i]=’\n’;last=a;i++;
pp(“thetagis~\n”);
while((c=getchar())!
=’~’)
{
If(c==’#’)
{
*(last)=’0’;
last=last–1;
}
elseif(c==’@’)
while(*(last)!
=’\n’)
{
*(last)=’0’;
*(last+1)=’0’;
last=last-1;
}
elseif(c!
=’#’&&c!
=’@’)
{
a[i]=c;
last=last+1;getch();i++;
}
}
pp(“theresultis:
\n”);
for(j=0;j
if(a[j]!
=’0’){pp(D,a[j]);}
getch();
}
#include
#include
#include
#include
#include
#defineSTACK_IN99v_SIZE100
#defineSTACKINCREMENT10
structSqStack
{
char*base;
char*top;
intstacksize;
};
voidInitStack(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;
}
voidpush(SqStack&S,chare)
{
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;
}
charpop(SqStack&S,char&e)
{
if(S.top==S.base)
returnfalse;
e=*--S.top;
returne;
}
voidClearStack(SqStack&S)
{
S.top=S.base;
}
voidDestroyStack(SqStack&S)
{
free(S.base);
S.top=S.base;
}
boolStackEmpty(SqStack&S)
{
if(S.top==S.base)
returntrue;
returnfalse;
}
/*voidPrintStack(SqStack&S)
{
chare;
while(!
StackEmpty(S))
{
pop(S,e);
printf("%d",e);
}
}*/
voidmain()
{
charch,e;
SqStackS,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);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 实现 一个 简单 编辑器 数据结构 课程设计 参考 样本