字符串替换

来源:互联网 发布:淘宝每日好店怎么参加 编辑:程序博客网 时间:2024/06/06 08:53

一、问题

函数声明如下: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加1flag=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等著名算法可以另行参考。

0 0