文本编辑器C++代码(推荐文档)_第1页
文本编辑器C++代码(推荐文档)_第2页
文本编辑器C++代码(推荐文档)_第3页
文本编辑器C++代码(推荐文档)_第4页
文本编辑器C++代码(推荐文档)_第5页
全文预览已结束

下载本文档

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

文档简介

#iiiclude<iostieam>#mclude<string>usingnamespacestd;mt*get_next(char*T,int*next);〃声明get_next函数以获取next数组iiitKMP(char*S,char*T)y/声明KNIP函数调用next函数来进行查找intget_choice();//选择要执行的功能voidserach(stiiiigS);//定义查找函数voidadd_char(stiing&S)y/定义添加函数voidchange(stimg&S)jl定义替换函数voiddelete_char(strmg&S)//定义删除函数voiddisplay(stimg&S);//显示函数,用于显示当前的字符串hit*get_next(constchar*T,int*next)(inti=0J=-1;intlength=strlen(T);〃根据T字符串将所得到的next数组值存在next指针指向数组中int*temp=next;*next=-1;wlule(i<length){此==-l||*(T+i)){i++;〃如果字符串中第i个字符与从头起第J个相同,则1,J分别向后移一位j++;if(*(T+i)!=*(T+j))*(next+i)=j;//当遇到第一个不相同的字符时,当前的j值就是next数组第i个元素的值else*(next+i)=*(next+j)//如果相同,则从字符串开始第j个元素的next值与当前位置的值相同)elsej=*(next+j);//如果遇到第1个元素和从头起的第j个元素不相同,则从第j个元素的next值的位置回溯}returntemp;}hitKMP(stringS,stnngT){intS_Length=S.length();intT_Length=T.length();if(S_Length<T_Length)return0;//如果目标串比要查找的串要短,直接返回失败inti=0J=0;int*next=newiiit[T_Length];get_next(T.c_sti(),next);wlule(ivS_Length&&j<T_Length)(if(j=-l||*(S.c_str()+i)==*(T.c_strQ+j))(1++;//如果对应1,J元素相同,则依次向后错一位J++;)elsej=*(next+j);//否则通关next函数,将j指针回溯一定距离}if(J>=T_Length)retiinii-T_Length+l;//当j=T_Length时,意味查找成功,返回开始字符所在的位置elseremni0;//否则返回失败}mtget_choiceQ(//获取用户输入的选项,以进行相应操作inttemp;cout«"请输入你即将执行的操作:\nl一一查找\t2一一添加\t3—一替换\n4—一删除\t5 显示当前字符串\t6 退出你的选择:"v<endl;wliile(l)(cin»temp;if(temp<7&&temp>0)//只有输入1-6时才返回输入的选项returntemp;else(coutvv”你的输入有误,请重新输入\11你的选择:”;)}}voidserach(stiiiigS)(intk;struigT;cout«"请输入要查找的串:”;cin.sync(〃/清空缓存区,否则将自动读入输入选项时候按下的回车键getline(cm,T);if(k=KMP(S,T))〃KMP的返回值不为0即查找成功时候,if条件判断认为是真cout«"所要查找的字符串从第”vvkvv”个字符开始"«endl;elsecout«"查找失败!H«endl;}voidadd_char(string&S)(intk;strmgm;cout«"请输入你想插入的位置”;wliile(l)cin»k;if(k>=0&&k<=S.lengthO)〃插入的位置不能再字符串外而break;elsecoutvv”你输入的位置有误,请重新输入你想插入的位置:”;}cout«"请输入你要插入的字符串:”;cin.sync(〃/清空缓存区,否则将自动读入输入选项时候按下的回车键getline(cmjn);S=S.insert(k.m);〃将字符串m插到S的第k个位置上}voidchange(stimg&S){〃调用String类将第K个字符到第m个字符替换为新字符串的函数intkan;stimgtemp;cout«"请输入由第几个字符开始替换:”;wlule(l)cin»k;if(k<S.lengtliQ&&k>=0)〃起始位置必须小于字符串长度(COUtVV”替换至第几个字符:”;wliile(l)(cin»m;if(m<=S.length()&&m>k)〃结尾位置必须不大于字符串长度且不小于起始位置break:elsecout«"输入有误,请重新输入结尾:”;)break;)elsecoutvv”输入有误,请重新输入开头:”;}cout«"请输入要替换成的字符串:”;cm.syiic();getline(cmjemp);S.replace(k,m,temp);//W目标串替换至指定位置}voiddelete_char(stiiiig&S)(intkan;cout«"请输入从第几个字符开始删除:”;wlule(l)cin»k;if(k<S.lengthQ&&k>=0)〃如果k=S.lengthQ,则下面无法删除0个COUtVV”删除的字符个数为:”;wliile(l)(cin»m;if((k+m)<=S.lengthO&&m>0)//删除的最后一个字符不能超出字符串的长度break:elsecout«"输入有误,请重新输入个数:”;)break;}elsecoutvv”输入有误,请重新输入开始位置:”;}S=S.erase(k4ii);}voiddisplay(strmg&S){cout«"当前字符串为:yVendl;cout«S.data()«endl;}voidmain(){intchoice;strmgS;cout«"请输入一个字符串:yVendl;getline(ciii,S);wlule(l)choice=get_choiceQ;switch(cho

温馨提示

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

评论

0/150

提交评论