题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
错误解法:
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == nullptr|| length < 0)
return;
int originalLength = 0;
int numberOfBlank = 0;
int i =0;
while(str[i]!='\0')
{
++originalLength;
if(str[i]==' '){
++numberOfBlank;
}
++i;
}
int newLength = originalLength+numberOfBlank*2;
if(newLength > length)
return;
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){
if(str[indexOfOriginal == ' ']){
str[indexOfNew--]='0';
str[indexOfNew--]='2';
str[indexOfNew--]='%';
}
else{
str[indexOfNew--]=str[indexOfOriginal];
}
--indexOfOriginal;
}
}
};
问题在于:末尾的结束符没能正确处理好。
正确解法1:
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==NULL)
return ;
int CountOfBlanks=0;
int Originallength=0;
for(int i=0;str[i]!='\0';i++)
{
Originallength++;
if(str[i]==' ')
++CountOfBlanks;
}
int len =Originallength+2*CountOfBlanks;
if(len+1>length)
return ;
char*pStr1=str+Originallength;//复制结束符‘\0’
char*pStr2=str+len;
while(pStr1<pStr2)
{
if(*pStr1==' ')
{
*pStr2--='0';
*pStr2--='2';
*pStr2--='%';
}
else
{
*pStr2--=*pStr1;
}
--pStr1;
}
}
};
源代码及测试用例:
https://github.com/zhedahht/CodingInterviewChinese2/blob/master/05_ReplaceSpaces/ReplaceSpaces.cpp