字符串替换

一、问题

函数声明如下:char[] strreplace(char[] str, char[] sub,char[] rep)

其中str为原字符串,sub为待被替换的子串。为简单起见, 假定字符串sub和rep长度一样


二、源代码

char[] strreplace(char[] str, char[] sub, char[] rep) 
{
	int i = 0;
	while (i < str.length) 
	{
		boolean flag = true;
		int curIndex = i;
		int j = 0;
		while ( j != sub.length)// 没有超过sub的最后一位
		{
			if(sub[j++] != str[curIndex++])// 第j个sub索引 匹配str
			{
				flag=false;
				break;
			}
		}
		if (flag == true) 
		{
			replaceAt(i, str, rep);
			i = curIndex - 1;// curIndex-1之前表示未匹配的下一位,-1表示匹配的最后一个,
				//之所以煞费苦心的-1,是因为无论如何循环都会对i加1
			flag=false;
		}
		i++;
	}
	return str;
}

void replaceAt(int index, char[] str, char[] rep) 
{
	for (int j = 0, i = index; i <index + rep.length; i++) 
	{
		str[i] = rep[j++];
	}
}

三、解析

问题的关键在于字符串的匹配,这里的匹配方法使用了最基本的方法。唯一的一个聪明点的操作是,与每次移动一位相比,增加了匹配成功时额外操作——如果匹配成功,就从匹配之后的位置再次查找。关于字符串的匹配有KMP等著名算法可以另行参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值