您所在位置: 网站首页 / 文本编辑器C++代码.doc / 文档详情
文本编辑器C++代码.doc 立即下载
2024-11-20
约3.3千字
约5页
0
35KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

文本编辑器C++代码.doc

文本编辑器C++代码.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

8 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<iostream>
#include<string>
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);//显示函数,用于显示当前的字符串
int*get_next(constchar*T,int*next){
	inti=0,j=-1;
	intlength=strlen(T);	//根据T字符串将所得到的next数组值存在next指针指向数组中
	int*temp=next;
	*next=-1;
	while(i<length){
		if(j==-1||*(T+i)){
			i++;//如果字符串中第i个字符与从头起第j个相同,则i,j分别向后移一位
			j++;
			if(*(T+i)!=*(T+j))
				*(next+i)=j;//当遇到第一个不相同的字符时,当前的j值就是next数组第i个元素的值				
			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<T_Length)
		return0;//如果目标串比要查找的串要短,直接返回失败
	inti=0,j=0;
	int*next=newint[T_Length];
	get_next(T.c_str(),next);
	while(i<S_Length&&j<T_Length){
		if(j==-1||*(S.c_str()+i)==*(T.c_str()+j)){
			i++;//如果对应i,j元素相同,则依次向后错一位
			j++;
		}
		else
			j=*(next+j);//否则通关next函数,将j指针回溯一定距离
	}
	if(j>=T_Length)
		returni-T_Length+1;//当j==T_Length时,意味查找成功,返回开始字符所在的位置
	else
		return0;//否则返回失败
}
intget_choice(){//获取用户输入的选项,以进行相应操作
	inttemp;
	cout<<"请输入你即将执行的操作:\n1——查找\t2——添加\t3——替换\n4——删除\t5——显示当前字符串\t6——退出\n你的选择:"<<endl;
	while(1){
		cin>>temp;
		if(temp<7&&temp>0)//只有输入1-6时才返回输入的选项
			returntemp;
		else
		{
			cout<<"你的输入有误,请重新输入\n你的选择:";
		}
	}
}
voidserach(stringS){
	intk;
	stringT;
	cout<<"请输入要查找的串:";
	cin.sync();//清空缓存区,否则将自动读入输入选项时候按下的回车键
	getline(cin,T);
	if(k=KMP(S,T))//KMP的返回值不为0即查找成功时候,if条件判断认为是真
		cout<<"所要查找的字符串从第"<<k<<"个字符开始"<<endl;
	else
		cout<<"查找失败!"<<endl;
}
voidadd_char(string&S){
	intk;
	stringm;
	cout<<"请输入你想插入的位置";
	while(1)
	{
		cin>>k;
		if(k>=0&&k<=S.length())//插入的位置不能再字符串外面
			break;
		else
			cout<<"你输入的位置有误,请重新输入你想插入的位置:";
	}
	cout<<"请输入你要插入的字符串:";
	cin.sync();//清空缓存区,否则将自动读入输入选项时候按下
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

文本编辑器C++代码

文档大小:35KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用