当正常的从前往后不能解决时,尝试从后往前。
/*把字符串中的每个空格替换成“%20”,要求在原字符串上直接替换。(假设原字符串有足够空间)*/
//先遍历一边字符串统计出空格数,然后计算出替换后的字符串的长度,最后从后往前依次替换。
void replace_blank(char s[],int slen)
{
int count=0, i=0, len=0;
if(s==NULL) return;
while(s[i]!='\0')
{
++len;
if(s[i]==' ')
{
++count;
}
++i;
}
int newlen = len+2*count-1;
if(newlen>slen-1) return; //原字符串没有足够的空间
for(int j=len-1;j>=0;j--)
{
if(s[j]==' ')
{
s[newlen--] = '0';
s[newlen--] = '2';
s[newlen--] = '%';
}
else
{
s[newlen--] = s[j];
}
}
}
类推:当合并两个数组到其中一个数组中时,可以考虑从后向前复制,可以减少移动次数。