题目: 请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy.”,则输出“we%20are%20happy.”
解题思路:
- 首先求出原字符串的长度
length,然后求出替换空格后字符串的新长度newLength;然后将两者作为字符串的下标,指向对应位置;如下图所示:

- 然后从后向前依次复制字符串的内容,每复制一个字符,对应
length--;newLength--;; - 每当
length下标对应的字符为空格时,就把空格内容替换为%20,同时执行一次length--,3次newLength--; - 当
length==newLength时,结束。
整个过程图示如下:

代码实现:
public static void replaceBlank(char[] string){
if (string==null||string.length<=0)
return;
int length= string.length;
//originalLength为字符串string的实际长度
int originalLength=0;
//字符串中的空格数量
int numberOfBlank=0;
int i=0;
while (string[i]!='\0'){
++originalLength;
if (string[i]==' ')
++numberOfBlank;
++i;
}
//将字符串中的空格替换成 %20,之后字符串的新长度
int newLength=originalLength+numberOfBlank*2;
//如果字符串的新长度大于length,则退出,因为替换之后会造成数组越界
if (newLength>length)
return;
int indexOfOriginal=originalLength;
int indexOfNew =newLength;
while (indexOfOriginal>=0&&indexOfNew>indexOfOriginal){
//如果是空格,则将其替换成 %20 并将indexOfNew向前移动3位
if (string[indexOfOriginal]==' '){
string[indexOfNew--]='0';
string[indexOfNew--]='2';
string[indexOfNew--]='%';
}
//如果不是空格则将indexOfNew向前移动一格
else {
string[indexOfNew--]=string[indexOfOriginal];
}
--indexOfOriginal;
}
}
本文介绍了一种将字符串中空格替换为%20的算法实现。通过计算原字符串长度和空格数量,确定新字符串长度,从后向前遍历并替换空格,最终完成字符串的转换。
1098

被折叠的 条评论
为什么被折叠?



