2023年数据结构与算法分析实验报告_第1页
2023年数据结构与算法分析实验报告_第2页
2023年数据结构与算法分析实验报告_第3页
2023年数据结构与算法分析实验报告_第4页
2023年数据结构与算法分析实验报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

《数据结构与算法分析》课程设计报告

课题名称:_____________文本编辑器__________________

课题设计人(学号):刘佳玉4

指导教师:______________朱宏_____________

评阅成绩:?

评阅意见:「

提交报告时间:2013年12月22日号

文本编辑器

计算机科学与技术专业

学生刘佳玉指导老师朱宏

[摘要]文本编辑器(或称文字编辑器)是用作编写普通文字的应用软件,

它与文档编辑器(或称文字解决器)不同之处在于它并非用作桌面排版(例如文

档格式解决)。它常用来编写程序的源代码。专业的计算机用户使用的文本编辑

器往往不限制打开文献的大小。这样的编辑器在编辑大文献时,启动仍然不久,

并且它们还可以编辑超过内存大小的文献。而简朴的文本编辑器通常直接把文

献读至内存。这样在解决较大文献时速度较慢,对于更大的文献,则干脆无法解

决。我所做的这个文本编辑器包含插入、移除、替换、查找、显示和新建的功

能,是一种简朴的文本编辑器。

关键词:简朴的文本编辑器插入移除替换查找显示新建

一、实验名称:文本编辑器

二、实验的目的和规定:

1.采用C++的ASCII码文献和串函数实现;

2.纯熟掌握串运算的应用;

3.纯熟掌握计算机系统的基本操作方法,了解如何编辑、编译、链接

和运营一个C++程序;

4.上机调试程序,掌握查错、排错使程序能对的运营。

三、实验的环境:指硬件和软件环境

1.硬件环境:G405+4G内存+320G硬盘+川大校园网

2.软件环环境:

操作系统:Windows7

编译系统的版本的特点:Dev—C++是一套用于开发C/C++的自由的

集成开发环境(IDE),并以GPL作为散布许可。使用Mi

nGW及GDB作为编译系统与除错系统。Dev-C++的IDE是运用

De1phi开发的o

编辑软件特点:包含强大的类和内嵌WinAPI的MFC,具有可视化

的编程界面。

四、算法描述:

1、用户可以选择自己输入文本或者直接使用程序以初始化的文本,用

switchcase语句就可以根据用户不同的选择执行相应的代码。

相应代码:

cout<<"a代表自己输入文本,b代表使用电脑设立的文本nd

1;

cout<V"请输入你的选择:"<<endl;

charch;

cin>>ch:

switch(ch)〃对用户的不同选择执行不同的代码

case'a'://当用户选择自行输入文本时

break;

case'b'://当用户选择使用电脑设立的文本时

break;

)

2、当用户选择自己输入文本时,就需要写一些函数来存储这些信息,

可以将这些函数封装在一个模板类中,只要定义一个之歌类的对象

(bianji)就可以在需要的时候调用类的函数。在这个时候需要调用

的函数有:

bianji.Sethang(h);〃设立文本的行数

bianji.Setlie(1);//设立文本的列数

bianji.Setwenben();〃输入文本

bianji.Showwenben();//显示文本

3、单用户选择使用程序初始化的文本时,只要显示文本即可。这个

时候需要的函数有:

bianji.Showwenben();〃显示文本

4、该文本编辑器有插入,移除,替换,查找,显示和重置的功能,

通过输出语句告知用户文本编辑器的功能,并询问用户要使用哪个功

能。相应代码:

charch='s';〃初始化ch

whi1e(ch!='q')〃当ch!='q'时,就不会退出循环

(

cout<〈”i代表插入文本”;

ocoutV<"R代表移除文本

ocout〈〈”r代表替换文本”;

cout〈V"f代表查找文本”;

cout。"s代表显示当前文本";

°cout<<"n代表重新建立一个文本”;

cout<<"q代表退出"<<end1;

℃out<<”请输入你的选择:”;

cin>>ch;

5、当用户选择插入(insert)功能时,就只需要将当前行数加1,

将要插入的行及其后面的行的文本往后移一行,在输入要插入的行的

文本即可,相应代码:

while(h0>bianji.Gethang()||h0<1)//假如要插入的行大

于已有的〃最大行或者小于第一行就会规定重新输入一个

(

cout<<“输入错误,请重输:”;

»cin>>hO;

bianji.Sethang(bianji.Gethang()+1);〃当前行数力U1

inti,j;

for(i=bianji.Gethang()T;i〉=hO;i--)〃把要插入行及后面的

行的〃文本往后一次移一行

(

for(j=O;j<bianji.Get1ie():j++)

(

gbianji.Xiugaiwenben(i,j,i-1,j);

»)

}

for(i=0;i<bianji.Getlie();i++)//输入要插入的那一行的文本

{

•cout。"请输入第"<<hOV<"行第"V<i+1个字符:”;

obianji.Fuzhiwenben(hO—1,i);

cout<<end1;

)

bianji.Showwenben();〃显示文本

6、当用户选择移除(remove)功能时,只需要将要移除的行的后面的

文本依次往前移一行,就会顺便把要移除行的文本覆盖了,相称于达

成了移除的效果,相应代码:

while(h1>bianji.Gethang()||hl<1)//假如要移除的行大于

己有的//最大行或者小于第一行就会规定重新输入一个

町。区〈<〃输入有误,请重输:”;

cin>>h1;

)

bianji.Sethang(bianji.Gethang()-1);//将当前行数减1

inti1,jl;

for(i1=h1-1;il<bianji.Gethang();il++)//把要移除的行

的后面的〃行一次往前移一行就顺便把要移除的那一行给覆盖

{〃了,从而达

成移除的效果

for(j1=0;jKbianji.Getlie();jl++)

(

。bianji.Xiugaiwenben(i1,j1,i1+1,jl);

}

)

bianji.Showwenben();

7、当用户选择替换(replace)功能时,只需要重新输入要替换行的文

本即可,其他行的文本不变,相应代码:

for(i2=0;i2<bianji.Get1ie();i2++)〃得到要替换的那一

行的列//数,然后输入新的文本

(

ocoutV〈"请输入第"<<h2。''行第"<Vi2+lV<"个字符:";

<>bianji.Fuzhiwenben(h2-l,i2);

cout<<end1;

}

bianji.Showwenben();

8、当用户选择查找(find)功能时,只要用户输入相应列数的文本,然

后将其与每一行的文本进行比较,假如完全相同,则会输出相应的行

号,通过循环语句来进行匹配,相应代码:

for(i3=0;i3<bianji.Getlie();i3++)//根据当前文本的列数来

输入//要查找的文本

(

cout«"请输入第〃<<i3+l<<"列的字符:〃;

bianji.Fuzhiwenben(bianji.Gethang(),i3);〃将输入的文

本放//到当前的最后一行,只是暂时的

}〃在这个功

能完了后就会//消失,由于没有改变文本的行列

for(i3=0;i3<bianji.Gethang();i3++)〃根据输入的文本,

一行一行〃的搜,将每一行的文本域输入的文本进行匹配

{〃假如匹配成功就会输出相

应的行数

j3=0;while(bianji.Findwenben(i3,j3)==bian

ji.Findwenben(bianji.Gethang(),j3)&&j3<bia

nji.Getlie())

(

j3++;〃相同就会在查下一列的字符是否相同,直到这一

完//了

)

»if(j3==bianji.Getlie())

{

ocout<<“你要找的文本在第"V<i3+l<<"行"V〈endl;

«count+=l;

»}

)

if(count==0)

(

cou"你要找的文本不在现有文本中“〈〈end1;

)

cout<<endl;

9、当用户选择显示(show)功能时,只需要调用模板类中的显示函数

即可,相应代码:

bi2由1$11。、丫亚0m011();与初始化的部分相同,也只是要调用模

板类中的相应函数即可,相应代码:

coutV〈”请输入新的行数:〃;

cin>>h4;

bianji.Sethang(h4);〃新行

coutV<”请输入新的列数:”;

cin>>14;

bianji.Setlie(14);〃新列

bianji.Setwenben();//新文本

bianji.Showwenben();//显示文本

10、当用户选择重置(new)功能时,

五、源程序清单:

该程序代码分为3部分,分别是:

1、模板类的代码,文献名“linklist.h",相应代码:

#ifndefLINKLIST_H_

#defineLINKLIST_H_

#include<iostream>

usingnamespacestd;

template<classElemType>//队列的模板类

classLinkList

(

private:

ElemTypewenben[256][256];〃创建一个二维数组作为存

储文本的空间

inthang;//数组的行

intlie;〃数组的列

public:

LinkList()//构造函数

a(

°hang=1;//初始化行数为1

°1ie=1;//初始化列数为1

«wenben[0][0]=/a';//初始化文本为,a'

。〜LinkList(){}//析构函数

voidXiugaiwenben(inthl,int11,inth2,int12)//

修改文本,将文本中h2行12列的

。{//字符

赋给hl行11列

wenben[h1][11]=wenben[h2][12];

}

voidFuzhiwenbenCinth,int1)〃给文本中h行1列赋

一个字符

°(

«cin»wenben[h][l];

)

oE1emTypeFindwenben(inth,int1)〃返回h行1列的字符

a{

“returnwenbenEh][1];

}

»voidSethang(inth)〃设定数组的行数

|

hang=h;

,intGethang()〃得到数组的行数

"returnhang;

ovoidSetlie(int1)//设定数组的列数

a{

lie=l;

}

ntGetlie。//得到数组的列数

oreturn1ie;

B}

ovoidSetwenben()//设立一个文本

6inti,j;

»for(i=0;i<hang;i++)

a{

。。cout<〈"请输入第"<<i+1<<"行的文本:"VVendl;

“for(j=0;j<lie;j++)

6{

coutV<"请输入第"《i+l«"行第"<q+l<V

列的字符"〈vend1;

。cin»wenben[i][j];

000}

}

voidShowwenben()//显示当前文本

3(

ecoutvv”当前文本是:“VVend1;

“ntij;

“for(i=0;i<hang;i++)

00{

3ofor(j=0;j<lie;j++)

b{

oocout«wenben[i][j];

6}

ocout<<endl;

)

);

#endif

2、编辑类的代码,文献名是“editor.h”,相应代码:

#includenlink1ist.h”

classEditor

private:

linkListVchar>bianji;〃模板类的char型对象,用来调用

模板类中的函数

intcount;〃在使用查找功能时用来判断是否要查找的文本在当前

文本中

public:

ovoidChushihua()//设立文本的函数

K

°cout«"a代表自己输入文本,b代表使用电脑设立的文本"<<e

nd1;

»cout<<"请输入你的选择:"<Vendl;

。charch;

»cin»ch;

switch(ch)//对用户的不同选择执行不同的代码

°{

。case'a'://当用户选择自行输入文本时

“cout<<"请输入文本的行数:";

»inth;

cin>>h;

“cout«endl;

。coutV<"请输入文本的列数:";

“inti;

“cin»l;

bianji.Sethang(h);〃设立文本的行数

。»bianji.Set1ie(1);〃设立文本的列数

°。bianji.Setwenben();//输入文本

0»bianji.Showwenben();〃显示文本

break;

•case'b,:〃当用户选择使用电脑设立的文本时

bianji.Showwenben();〃显示初始化的文本

obreak;

6)

avoidEdite()〃编辑文本的函数

°{

«charch='s';//初始化ch

«whi1e(ch!='q')//当ch!=,q'时,就不会退出循环

{

coutV<"i代表插入文本";

。»cout«"R代表移除文本";

,cout<<"i"代表替换文本

cout«"f代表查找文本

icout<<"S代表显示当前文本";

。cout<v"n代表重新建立一个文本";

ocout<<"q代表退出"«endl;

℃out<<"请输入你的选择:";

“cin»ch;

switCh(ch)//根据用户的不同选择执行不同的代码

doo

“ocase,i':〃选择插入(insert)功能

bianji.Showwenben();//显示当前文本

。。cout«”请问要插入到第几行?:”;

3inthO;

gcin»h0;

^while(hO>bianji.Gethang()||h0V1)〃假如要插入的行大于已

有的最大行或者小于第一行就会规定重新输入一个

063{

°6c0Ut<V"输入错误,请重输:

cin>>hO;

06)

»«bianji.Sethang(bianji.Gethang()+l);//当前行数加1

。inti,j;

oofor(i=bianji.Gethang()-1;i>=h0;i-)//把要插入行

及后面的行的文本往后一次移一行

6{

«for(j=0;j<bianji.Getlie();j++)

060{

。“bianji.Xiugaiwenben(i,j,i-l,j);

00)

^for(i=0;i<bianji.Getlie();i++)//输入要插入的那一行的文本

ocout«n请输入第1,«h0«”行第n«i+l«n个字

符:“;

g。bianji.Fuzhiwenben(hO-l,i);

。cout<<endl;

06o}

3bianji.Showwenben();//显示文本

abreak;

gcase'R:〃选择移除(remove)功能

。6bianji.Showwenben();

8COUtVV”请问要移除哪一行?:”;

inthl;

cin>>hl;

36While(hl>bianji.Gethang()IIhl〈l)〃假如要移除的行大

于已有的最大行或者小于第一行就会规定重新输入一个

。{

8coutVV”输入有误,请重输:”;

ocin>>hl;

6}

g3bianji.Sethang(bianji.Gethang()-1);〃将当前行数减1

ainti1,j1;

ofor(il=hl-1;il<bianji.Gethang();il++)〃把要移除的行

的后面的行一次往前移一行就顺便把要移除的那一行给覆盖

00[

//了,从而达成移除的效果

。。。for(j1=0;jl<bianji.Getlie();j1++)

6(

ob。bianji.Xiugaiwenben(il,j1,i1+1,j1);

003}

00}

3。。bianji.Showwenben();

ebreak;

“ocaseT://选择替换(rep1ace)功能

3"bianji.Showwenben();

g。coutVv”要替换哪一行?:";

。ainth2;

。ocin»h2;

»inti2;

。for(i2=0;i2<bianji.Getlie();i2++)〃得到要替换的那一行

的列数,然后输入新的文本

°(

。ocoutV("请输入第"<<h2<<"行第"<Vi2+1<<"个字

符:";

“bianji.Fuzhiwenben(h2—1,i2);

cout<<endl;

00

“gbianji.Showwenben();

o"break;

o"casef:〃选择查找(find)功能

bianji.Showwenben();

“coutVv”请输入要查找的文献:"<<end1;

gginti3,j3;

“bcount=0;

。ofor(i3=O;i3<bianji.Getlie();i3++)//根据当前文本的

列数来输入要查找的文本

3bb(

-coutVV”请输入第”vVi3+lvv”列的字符:”;

gobianji.Fuzhiwenben(bianji.Gethang(),i3);〃将输入的文本

放到当前的最后一行,只是暂时的

。。}//在这个

功能完了后就会消失,由于没有改变文本的行列

/*coutVv"第”vvh3〈V”行的文本是:”Wendi;〃输入

行数就会将当前文本中那一行的文本输出

。for(i3=0;i3<bianji.Getlie();i3++)

000I

cout«bianji.Findwenben(h3-1,i3);

34*/

gfor(i3=0;i3<bianji.Gethang();i3++)//根据输入的文

本,一行一行的搜,将每一行的文本域输入的文本进行匹配

假如匹配成功就会输出相应的行数

“呵3=0;

。awhi1e(bianji.Findwenben(i3,j3)==bianji.Findwe

nben(bianji.GethangO,j3)&&j3<bianji.Getlie())

j3++;〃相同就会在查下一列的字符是否相同,直到这一行完了

6}

if(j3==bianji.Getlie())

6{

acout«"你要找的文本在第"<Vi3+1<<"行"

«endl;

o3count+=l;

00}

oooj-

^if(count==0)

bbb{

。«cout«"你要找的文本不在现有文本中"<<end1;

do}

acout«endl;

gobreak;

gocase's':〃选择显示当前文本

obianji.Showwenben();

obreak;

3case%':〃选择重置(new)功能

3binth4,14;

b"cout<<”请输入新的行数:";

3ocin>>h4;

g“bianji.Sethang(h4);//新行

coutw”请输入新的列数:”;

。cin»14;

。"bianji.Setlie(14);//新列

®bianji.Setwenben。;//新文本

bianji.Showwenben();〃显示文本

。break;

case'q':

。break;

°}

};

3、主函数的代码,文献名是“main.cpp",相应代码:

#includeH1inklist.hH

#includeneditor.h"

intmain()

Editore;//编辑类的对象,用来调用类中的函数

oe.Chushihua();//调用设“文本的函数

e.Edite();//调用编辑文本的函数

oreturn0;

}

六、运营结果:

1、选择自己输入文本(a),输入文本为(3行2歹!)):

qw

er

ty

*,E:\devc++\cpp\test_editor2\Debug\test_editor2.exe"

a代表自已输入文本,b代表使用电脑设置的文本

请输》在尔的诿择:

储输入文本的行数:3

躅端耦舞2

请驰入第南第i列的字符

)输入第t行第2列的字符

入异

主■-t-

AH-n2T

-up

字符

入孽-

t-2

ro?irfiF-.Tsp-

请输入第2行第2列的字符

掘翻魅字符

;青输入第3行第2列的字符

售前文本是,

qw

er

tv

进行插入操作(i),插入文本as到第2行:

娄鳖以冬娄鸳J露津*■代表替换文本f代表查找文本s代表显示当前文本n代表

霸鼐缸…

qw

er

翩鬻耀悔::

请输入第2行第2个字符:s

当前文本是:

qw

as

进行移除操作(R),移除第3行文本:

ty

进行替换操作(t),将第一行文本qw替换为df:

蚣3专¥湃磨经”代表替换文本£代表查找文本S代表显示当前文本n代恚

当刖.

qw

as

ty

藕鬻彘褊,a

请输入第1行第2个字符:f

当前文本是:

L9£

进行查找操作(f),查找文本as和qw:

n代

文本

当前

显示

代表

本s

找文

表查

f代

文本

替换

代表

:本r

ty青人摹查找皈的

工的

会第驱a

呈的里:

S

d

e尔找的文本行

■它本哦

本n代

前文

示当

表显

s代

文本

查找

代表

本£

换文

表替

本「代

-若

*曾选

:f

刖:

AE

ty青人重查找

青入的

第露q

请入”:

•看

尔要找的文本•文本中

(S)

操作

显示

进行

就不

这里

的,在

同样

本是

入文

己输

和自

操作

重置

(n):

操作

重置

进行

尝试

自己

可以

爱好

,有

示了

a:

的文本

行一列

本是一

的文

内置

(b):

文本

置的

身内

序自

用程

2、使

的文本

脑设置

使用电

八代表

本’

勰瓷

至霸

是:

文本

当前

n代表

温馨提示

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

评论

0/150

提交评论