牛客网剑指Offer系列——替换空格
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目解析
超级水题,一开始直接用了C#的str.Replace来玩...,代码如下:
1
2
3
4
5
6
7
8
9
class Solution
{
public string replaceSpace(string str)
{
// write code here
str = str.Replace(" ","%20");
return str;
}
}
接着用开str2数组的方法,这个方法很蠢,但是过程实现很简单。不为空格的时候直接str1复制到str2,为空格的时候str2加入“%20”的字符,然后继续往下遍历。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//length为牛客系统规定字符串输出的最大长度,固定为一个常数
class Solution {
public:
void replaceSpace(char *str,int length) {
char str2[length];
int i,j;
for(i=0,j=0;str[i]!='\0';i++){
if(str[i]!=' '){
str2[j]=str[i];
j++;
}
else{
str2[j]='%';j++;
str2[j]='2';j++;
str2[j]='0';j++;
}
}
for(i=0;i<j;i++){
str[i]=str2[i];
}
str[i]='\0';
}
};
其实不开str2也是可以实现的,首先计算替换完所需的数组长度,即原数组长度+2×空格数。然后从后往前进行复制和替换。代码实现也非常简单,就不多解释了,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//length为牛客系统规定字符串输出的最大长度,固定为一个常数
class Solution {
public:
void replaceSpace(char *str,int length) {
int oldLength=0;
int spaceNumber=0;
int i,j;
for(i=0;str[i]!='\0';i++){
oldLength++;
if(str[i]==' '){
spaceNumber++;
}
}
int newLength=oldLength+2*spaceNumber;
str[newLength]='\0';
for(i=oldLength-1,j=newLength-1;i>=0;i--){
if(str[i]!=' '){
str[j]=str[i];
j--;
}
else{
str[j]='0';j--;
str[j]='2';j--;
str[j]='%';j--;
}
}
}
};