替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成“%20”。例如:输入“We are happy”,则输出“We%20are%20happy”;
题目的意思则是:
对于这个题,我的第一感觉是遇到空格就变成%20,所有的数字后移,即:
由上述方法可知,happy需要遇到两次,方法不可取的;
简便算法:
我们先遍历一次数组,得到总长度 len,已经空格数 number ,这时候的替换后的实际长度即为 newlen=len+number*2;这样我们就得要了替换后的数组的长度。然后从后往前遍历。
这时候我们就结束了我们的替换,全程只需要移动一次,就可以全部替换,是一种较为方便的算法。
代码:
void ReplaceBlank(char syring[],int length)
{
if(string==nullptr||length<=0)
return ;
int len=0;
int number=0;
int i=0;
while (string[i]!='\0')
{
++len;
if(string)[i]==' ')
{
++number;
}
++i;
}
int newlen=len+number*2;
if(newlen>lengh)
return ; // 这时候替换后的长度大于数组的长度,注意数组越界,应在开辟内存
int plen =len;
int qlen = newlen;
while(plen >= 0&&plen>qlen)
{
if(string[plen]==' ')
{
string[qlen--]='0';
string[qlen--]='2';
string[qlen--]='%';
}
else
{
string[qlen--]=string[plen]
}
plen--;
}
}