《数据结构与算法分析》课程设计报告
课题名称: 文本编辑器
课题设计人(学号): 佳玉2012141461134
指导教师: 宏
评阅成绩: 评阅意见:
提交报告时间:20 13 年 12 月 22 日
文本编辑器
计算机科学与技术 专业
学生 佳玉 指导老师 宏
[摘要] 文本编辑器(或称文字编辑器)是用作编写普通文字的应用软件,它与文档编辑器(或称文字处理器)不同之处在于它并非用作桌面排版(例如文档格式处理)。它常用来编写程序的源代码。专业的计算机用户使用的文本编辑器往往不限制打开文件的大小。这样的编辑器在编辑大文件时,启动仍然很快,而且它们还能够编辑超过存大小的文件。而简单的文本编辑器通常直接把文件读至存。这样在处理较大文件时速度较慢,对于更大的文件,则干脆无法处理。我所做的这个文本编辑器包含插入、移除、替换、查找、显示和新建的功能,是一种简单的文本编辑器。
关键词:简单的文本编辑器 插入 移除 替换 查找 显示 新建
一、实验名称:文本编辑器
二、实验的目的和要求:
1.采用C++的ASCII码文件和串函数实现; 2.熟练掌握串运算的应用;
3.熟练掌握计算机系统的基本操作法,了解如编辑、编译、和运行一个C++程序;
4.上机调试程序,掌握查错、排错使程序能正确运行。
三、实验的环境:指硬件和软件环境
1.硬件环境: G405+4G存+320G硬盘+川大校园网 2.软件环环境:
操作系统:Windows 7
编译系统的版本的特点:Dev-C++是一套用于开发C/C++的自由的集
成开发环境(IDE),并以GPL作为散布可。使用 MinGW 及 GDB 作为
编译系统与除错系统。Dev-C++的IDE是利用Delphi开发的。 编辑软件特点:包含强大的类和嵌WinAPI的MFC,具有可视化的编程界面。
四、算法描述:
1、用户可以选择自己输入文本或者直接使用程序以初始化的文本,用switch case语句就可以根据用户不同的选择执行相应的代码。 相应代码:
cout<<\代表自己输入文本,b代表使用电脑设置的文本\cout<<\请输入你的选择:\char ch; cin>>ch;
switch(ch)//对用户的不同选择执行不同的代码 {
case 'a'://当用户选择自行输入文本时 ······ break;
case 'b'://当用户选择使用电脑设置的文本时 ····· break; }
2、当用户选择自己输入文本时,就需要写一些函数来存储这些信息,
可以将这些函数封装在一个模板类中,只要定义一个之歌类的对象(bianji)就可以在需要的时候调用类的函数。在这个时候需要调用的函数有:
bianji.Sethang(h);//设置文本的行数 bianji.Setlie(l);//设置文本的列数 bianji.Setwenben();//输入文本 bianji.Showwenben();//显示文本
3、单用户选择使用程序初始化的文本时,只要显示文本即可。这个时候需要的函数有:
bianji.Showwenben();//显示文本
4、该文本编辑器有插入,移除,替换,查找,显示和重置的功能,通过输出语句告知用户文本编辑器的功能,并询问用户要使用哪个功能。相应代码:
char ch='s';//初始化ch
while(ch!='q')//当ch!='q'时,就不会退出循环 { }
5、当用户选择插入(insert)功能时,就只需要将当前行数加1,将要插入的行及其后面的行的文本往后移一行,在输入要插入的行的文本即可,相应代码:
cout<<\代表插入文本 \cout<<\代表移除文本 \cout<<\代表替换文本 \cout<<\代表查找文本 \cout<<\代表显示当前文本 \cout<<\代表重新建立一个文本 \cout<<\代表退出 \cout<<\请输入你的选择:\cin>>ch;
······
while(h0>bianji.Gethang()||h0<1)//如果要插入的行大于已有的//最大行或者小于第一行就会要求重新输入一个 { }
bianji.Sethang(bianji.Gethang()+1);//当前行数加1 int i,j;
for(i=bianji.Gethang()-1;i>=h0;i--)//把要插入行及后面的行的//文本往后一次移一行 { }
for(i=0;i bianji.Showwenben();//显示文本 6、当用户选择移除(remove)功能时,只需要将要移除的行的后面的文本依次往前移一行,就会顺便把要移除行的文本覆盖了,相当于达到了移除的效果,相应代码: while(h1>bianji.Gethang()||h1<1)//如果要移除的行大于已有的//最大行或者小于第一行就会要求重新输入一个 { cout<<\输入有误,请重输:\ cout<<\请输入第\行第\个字符:\bianji.Fuzhiwenben(h0-1,i); cout< for(j=0;j bianji.Xiugaiwenben(i,j,i-1,j); cout<<\输入错误,请重输:\cin>>h0; } cin>>h1; bianji.Sethang(bianji.Gethang()-1);//将当前行数减1 int i1,j1; for(i1=h1-1;i1 { //了,从而达到移除的效果 for(j1=0;j1 bianji.Showwenben(); 7、当用户选择替换(replace)功能时,只需要重新输入要替换行的文本即可,其他行的文本不变,相应代码: for(i2=0;i2 bianji.Showwenben(); 8、当用户选择查找(find)功能时,只要用户输入相应列数的文本,然后将其与每一行的文本进行比较,如果完全相同,则会输出相应的行号,通过循环语句来进行匹配,相应代码: for(i3=0;i3 cout<<\请输入第\列的字符:\ cout<<\请输入第\行第\个字符:\bianji.Fuzhiwenben(h2-1,i2); cout< bianji.Xiugaiwenben(i1,j1,i1+1,j1); } bianji.Fuzhiwenben(bianji.Gethang(),i3);//将输入的文本放// 到当前的最后一行,只是暂时的 } //在这个功能完了后就会//消失,因为没有改变文本的行列 for(i3=0;i3 j3=0; while(bianji.Findwenben(i3,j3)==bianji.Findwenben(bianji.Gethang(),j3)&&j3 { j3++;//相同就会在查下一列的字符是否相同,直到这一完// 了 } if(count==0) { } cout< 9、当用户选择显示(show)功能时,只需要调用模板类中的显示函数即可,相应代码: bianji.Showwenben();与初始化的部分相同,也只是要调用模板类中的相应函数即可,相应代码: cout<<\请输入新的行数:\ cout<<\你要找的文本不在现有文本中\} if(j3==bianji.Getlie()) { } cout<<\你要找的文本在第\行\count+=1; cin>>h4; bianji.Sethang(h4);//新行 cout<<\请输入新的列数:\cin>>l4; bianji.Setlie(l4);//新列 bianji.Setwenben();//新文本 bianji.Showwenben();//显示文本 10、当用户选择重置(new)功能时, 五、源程序清单: 该程序代码分为3部分,分别是: 1、模板类的代码,文件名“linklist.h”,相应代码: #ifndef LINKLIST_H_ #define LINKLIST_H_ #include template ElemType wenben[256][256];//创立一个二维数组作为存储文int hang;//数组的行 int lie;//数组的列 LinkList()//构造函数 { hang=1;//初始化行数为1 lie=1;//初始化列数为1 wenben[0][0]='a';//初始化文本为'a' 本的空间 public: