文本编辑器c++实验报告附源代码.docx
- 文档编号:3626459
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:12
- 大小:62.07KB
文本编辑器c++实验报告附源代码.docx
《文本编辑器c++实验报告附源代码.docx》由会员分享,可在线阅读,更多相关《文本编辑器c++实验报告附源代码.docx(12页珍藏版)》请在冰豆网上搜索。
文本编辑器c++实验报告附源代码
四川大学软件学院
实验报告
学号:
1043111051姓名:
王金科专业:
软件工程班级:
2010级5班
课程名称
数据结构
实验课时
8
实验项目
文本编辑器
实验时间
12到14周
实验目的
了解c++类的封装和KMP算法。
实验环境
Windows平台VC6.0++
实验内容(算法、程序、步骤和方法)
部分函数创建思想:
创建过程如下:
a、定义LinkList指针变量*temp:
LinkList*temp;
b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;
c、申请动态存储空间:
head->next=(LinkList*)malloc(sizeof(LinkList));
d、首行头指针的前驱指针为空:
head->pre=NULL;
首行指针:
temp=head->next;
首行指针的前驱指针也为空:
temp->pre=NULL;
定义没输入字符时文章长度为0:
temp->length=0;
初始化为字符串结束标志,防止出现乱码:
for(i=0;i<80;i++)
temp->data[i]='\0';
e、利用循环进行文本输入
for(j=0;j {for(i=0;i<80;i++)//控制一行 {ch=getchar();//接收输入字符 temp->data[i]=ch;//给temp指向的行赋值 ···· temp->length++;//行中字符长度加1 if(ch=='#') {NUM=j;break;//文章结束时,Num来记录整个文章的行数 }}} 在字符输入的过程中,如果在单行输入的字符超过了80个字符,则需要以下操作: 输入字符数大于80,重新分配空间建立下一行 temp->next=(LinkList*)malloc(sizeof(LinkList)); 给temp的前驱指针赋值: temp->next->pre=temp; temp指向当前行: temp=temp->next; 将下一行初始化为字符串结束标志,防止出现乱码: for(i=0;i<80;i++) temp->data[i]='\0'; 记录整个文章的行数: temp->row=NUM+1; 返回指向最后一行指针: returntemp; 文本输入部分到此结束。 实验流程图: 程序清单 Headerfile #include #include usingnamespacestd; int*get_next(char*T,int*next);//声明get_next函数以获取next数组。 intKMP(char*S,char*T);//声明KMP函数调用next函数来进行查找。 intget_choice();//选择要执行的功能。 voidserach(stringS);//定义查找函数,用于进行字符串查找。 voidadd_char(string&S);//定义添加函数,用于进行字符串添加。 voidchange(string&S);//定义替换函数,将修改指定位置上的字符为新指定的字符。 voiddelete_char(string&S);//定义删除函数,将用于删除指定位置上的字符。 voiddisplay(string&S);//显示函数,用于显示当前的字符串。 C++sourefile #include"textedit.h" usingnamespacestd; int*get_next(constchar*T,int*next){//根据T字符串将所得到的next数组值存在next指针指向的数组中 inti=0,j=-1; intlength=strlen(T); int*temp=next; *next=-1; while(i if(j==-1||*(T+i)==*(T+j)){//如果字符串中第i个字符与从头起第j个相同,则i,j分别向后移一位 i++; j++; if(*(T+i)! =*(T+j))//当遇到第一个不相等的字符时,当前的j值就是next数组第i个元素的值 *(next+i)=j; else *(next+i)=*(next+j);//如果相等,则从字符串开始第j个元素的next值与当前位置的值相同 } else j=*(next+j);//如果遇到第i个元素和从头起第j个元素不相同,则从第j个元素的next值的位置开始比较,即回溯 } returntemp; } intKMP(stringS,stringT){ intS_Length=S.length(); intT_Length=T.length(); if(S_Length return0; inti=0,j=0; int*next=newint[T_Length]; get_next(T.c_str(),next); while(i if(j==-1||*(S.c_str()+i)==*(T.c_str()+j)){//如果对应i,j号元素相同,则依次向后错一位,否则通过next函数,将j指针回溯一定距离。 i++; j++; } else j=*(next+j); } if(j>=T_Length)//实际上当j==T_Length时,即意味着查找成功,返回开始字符所在的位置,否则返回失败 returni-T_Length+1; return0; } intget_choice()//获取用户输入的选项,以进行相应操作。 { inttemp; cout<<"请输入你即将执行的操作: \n1--查找\t2--添加\t3--替换\n4--删除\t5--显示当前字符串\t6--退出\n你的选择: "; while(true){ cin>>temp; if(temp<7&&temp>0)//只有输入1、2、3、4、5、6时候才会返回输入的选项。 returntemp; else { cout<<"你的输入有误,请重新输入\n你的选择: "; } } } voidserach(stringS) { intk; stringT; cout<<"请输入要查找的串: "; cin.sync();//清空缓存区,否则将自动读入输入选项时候按下的回车键。 getline(cin,T); if(k=KMP(S,T))//KMP的返回值不为0即查找成功时候,if条件判断认为是真。 cout<<"所要查找的字符串从第"< "< else cout<<"查找失败"< } voidadd_char(string&S){ intk; stringm; cout<<"请输入你想插入的位置: "; while(true) { cin>>k; if(k>=0&&k<=S.length())//插入的位置不能在字符串外面。 break; else cout<<"你输入的位置有误。 请重新输入你想插入的位置: "; } cout<<"请输入你要插入的字符串: "; cin.sync();//同前 getline(cin,m); S=S.insert(k,m);//将字符串m插到S的第k个位置上。 } voidchange(string&S){//调用String类中将第k个字符到第m个字符替换为新字符串的函数。 intk,m; stringtemp; cout<<"请输入由第几个字符开始替换: "; while(true){ cin>>k; if(k { cout<<"替换至第几个字符: "; while(true){ cin>>m; if(m<=S.length()&&m>k)//结尾位置必须不能大于字符串长度,并且不能小于起始位置。 break; else cout<<"输入有误,请重新输入结尾: "; } break; } else cout<<"输入有误,请重新输入开头: "; } cout<<"请输入要替换成的字符串: "; cin.sync(); getline(cin,temp); S.replace(k,m,temp);//将目标串替换至指定位置。 } voiddelete_char(string&S){ intk,m; cout<<"请输入从第几个字符开始删: "; while(true){ cin>>k; if(k { cout<<"删除的字符个数为: "; while(true){ cin>>m; if((k+m)<=S.length()&&m>0)//同前,删除的最后一个字符的位置不能超出字符串的长度。 break; else cout<<"输入有误,请重新输入个数: "; } break; } else cout<<"输入有误,请重新输入开始位置: "; } S=S.erase(k,m); } voiddisplay(string&S) { cout<<"当前的字符串为: "< cout< } voidmain() { intchoice; stringS; cout<<"请输入一个字符串: "< getline(cin,S); while(true){ choice=get_choice(); switch(choice){ case1: serach(S);break; case2: add_char(S);break; case3: change(S);break; case4: delete_char(S);break; case5: display(S);break; default: exit(0); } } } 实验内容(算法、程序、步骤和方法) 数据记录 和计算 结论 (结果) 基本达到了实验的要求。 可以实现字符串的添加,查找,删除,现实,,,,。 而且可以对txt文件进行编辑。 工作正常。 可以正常的打开txt文件进行编辑,可以对文件进行保存 小结 自己在整个课程设计过程中还是比较轻松的,编写过程中遇到的困难及问题都通过查阅资料、向老师提问得以解决。 所以本次课程设计自己最大的体会就是不管写什么程序,自己首先得对这个问题要分析透彻,要知道自己要干什么,然后才能让自己干什么。 指导老师评议 成绩评定: 指导教师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文本 编辑器 c+ 实验 报告 源代码