题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==nullptr||length<=0)
return;
char* cur1=str;
char* cur2=str;
int Numblank=0;
int OriginalLength=0;
while(*cur2!='\0')
{
OriginalLength++;
if(*cur2==' ')
Numblank++;
cur2++;
}
if(Numblank==0)
return;
cur1=cur2;
cur2+=2*Numblank;
if(OriginalLength+2*Numblank>length)
return;
int copylength=OriginalLength;
while(copylength>=0)
{
if(*cur1!=' ')
{
*cur2=*cur1;
cur2--;
cur1--;
}
else
{
--cur1;
*cur2='0';
--cur2;
*cur2='2';
--cur2;
*cur2='%';
--cur2;
}
--copylength;
}
str=cur2;
}
};
这题需要注意的是:题目中给的这个length不是str字符串长度,是最大可用的内存字节数,题目中没说这点,在调试中才发现length不是字符串长度。如果笔试当中也给了这么个参数但没交代,不妨在程序中自己另设一个字符串de 长度变量用,就别胡乱蒙了
另外注意,复制字符串的时候。'\0'不能忘记它