题目描述

请实现一个函数,将一个字符串中的空格替换成“%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--;
            }
        }
    }
};