题目描述
请实现一个函数,把字符串s中的每个空格替换成“%20”
示例
输入:s = “We are happy.”
输出:“We%20are%20happy.”
解法一
char* replaceSpace(char* s){
char * ret = (char *)malloc((strlen(s) *3 + 1) * sizeof(char));
int i = 0;
int j = 0;
while(s[i] != '\0')
{
if(s[i] == ' ')
{
ret[j++] = '%';
ret[j++] = '2';
ret[j++] = '0';
i++;
}
else
{
ret[j++] = s[i];
i++;
}
}
ret[j] = '\0';
return ret;
}
解法二
思路:利用双指针的思想实现,开始时一个指针指向替换后数组的末尾,一个指针指向原始数组的末尾
/*length为字符串数组的总容量*/
void replaceSpace(char* s,int length)
{
if(s == NULL || length <= 0)
return;
int originalLength = 0; //原始字符串长度
int numberOfBlank = 0; //原始字符串中空格的个数
int i = 0;
while(s[i] != '\0')
{
originalLength++;
if(s[i] == ' ')
numberOfBlank++;
i++;
}
int newLength = originalLength + numberOfBlank * 2; //替换后数组的长度
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
{
if(s[indexOfOriginal] == ' ')
{
s[indexOfNew--] = '%';
s[indexOfNew--] = '2';
s[indexOfNew] = '0';
}
else
{
s[indexOfNew--] = s[indexOfOriginal];
}
indexOfOriginal--;
}
}