题目:
请实现一个函数,把字符串中的每一个空格替换成“%20”。例如输入“we are happy.”,则输出“we%20are%20happy.”。
分析:
如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么我们就考虑从后往前进行替换。
- 首先遍历原字符串,找出字符串的长度以及其中的空格数量,
- 根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。
- 设置两个指针point1和point2分别指向原字符串和新字符串的末尾位置。
- 如果point1指向内容不为空格,那么将内容赋值给point2指向的位置,如果point1指向为空格,那么从point2开始赋值“02%”
- 直到point1==point2时表明字符串中的所有空格都已经替换完毕。
代码:
void
replacespace(
char
string[],
int
length) {
int
blanknumber = 0;
int
i;
for
(i = 0; string[i] !=
'\0'
; i++) {
if
(string[i] ==
' '
) {
blanknumber++;
}
}
int
k = i + 2 * blanknumber;
if
(k > length)
return
;
string[k]=
'\0'
;
//此行必不可少
int
point1 = i - 1, point2 = k-1;
for
(; point1 >= 0 && point2 > point1; point1--) {
if
(string[point1] ==
' '
) {
string[point2--] =
'0'
;
string[point2--] =
'2'
;
string[point2--] =
'%'
;
}
else
string[point2--] = string[point1];
}
}
Java代码:
public static String ReplaceBlank(String str)
{
if(str == null || str.length() < 0)
if(str == null || str.length() < 0)
{
return null;
}
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(i < str.length())
return null;
}
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(i < str.length())
{ //计算空格数
if(str.charAt(i) == ' ')
numberOfBlank++;
++i;
}
int indexOfOriginal = str.length();
int indexOfNew = str.length() + numberOfBlank*2;
char[] chs = new char[indexOfNew];
indexOfNew--;
while(indexOfOriginal >=0 && indexOfNew >=0) {
indexOfOriginal--;
if(str.charAt(indexOfOriginal) == ' ')
if(str.charAt(i) == ' ')
numberOfBlank++;
++i;
}
int indexOfOriginal = str.length();
int indexOfNew = str.length() + numberOfBlank*2;
char[] chs = new char[indexOfNew];
indexOfNew--;
while(indexOfOriginal >=0 && indexOfNew >=0) {
indexOfOriginal--;
if(str.charAt(indexOfOriginal) == ' ')
{
chs[indexOfNew--] = '0';
chs[indexOfNew--] = '2';
chs[indexOfNew--] = '%';
} else {
chs[indexOfNew--] = str.charAt(indexOfOriginal);
}
}
return String.valueOf(chs);
chs[indexOfNew--] = '0';
chs[indexOfNew--] = '2';
chs[indexOfNew--] = '%';
} else {
chs[indexOfNew--] = str.charAt(indexOfOriginal);
}
}
return String.valueOf(chs);
}