请实现一个函数,把字符串 s 中的每个空格替换成”%20”。

示例 1:

输入:s = “We are happy.”
输出:”We%20are%20happy.”

限制:0 <= s 的长度 <= 10000

方法一:创造新的字符串,在新的字符串上面进行替换。

#define ERROR -1

char* replaceSpace(char* s)
{
    char *A = calloc(strlen(s)*3+1,sizeof(char));	//strlen(s)*3+1  全为空格‘ ’->‘%20’+‘\0’
    int i = 0;//两个指针i,k
    int k = 0;

    if(s == NULL)
    {
        return ERROR;
    }

    while(s[i]!='\0')
    {        
        if(s[i] == ' ')
        {
            A[k++] = '%';	//k++,替换
            A[k++] = '2';
            A[k++] = '0';
            i++;
        }
        else
        {
            A[k++] = s[i];
            i++;
        }
    }
    return A;
}

方法二:不创造新的字符串,在原有的字符串上面进行替换。

  1. 从头到尾扫描字符串,每次遇到空格的时候进行替换。替换时把后面的所有字符都往后移动2个字节。

  2. 先遍历一遍字符串,计算出字符串中的空格数。再从字符串的后面开始复制和替换,指针p1指向原始字符串的末尾,p2指向替换后的字符串的末尾。

    从后往前替换,节省了字符后移的步骤。