实现一个函数,将字符串中的空格都替换成“%20”,比如输入“we are happy”,则输出变为“we%20are%20happy”
这道题的解题思路我们可以从前往后复制,遇到空格就给它替换成要求的,但是这样就有的字符就移动了多次,所以可以从后往前去复制,第一步先统计有多少个空格,那就知道了应该往后移动多少个位置,接下来可以定义两个指针。
void ReplaceBlank(char string[],int length)
{
if (string == NULL || length <= 0)
return;
int originallength=0;
int endlength=0;
int blank = 0;
int i = 0;
while (string[i] != '\0')
{
++originallength;
if (string[i] == ' ')
{
++blank;
}
++i;
}
endlength = originallength + 2 * blank;
if (endlength > length)
return;
int indexstart = originallength;
int indexnow = endlength;
while (indexstart >= 0 && indexnow > indexstart)
{
if (string[indexstart] == ' ')
{
string[indexnow--] = '0';
string[indexnow--] = '2';
string[indexnow--] = '%';
}
else
{
string[indexnow--] = string[indexstart];
}
--indexstart;
}
}
至于为什么循环这一句截止条件为
while (indexstart >= 0 && indexnow > indexstart)
刚开始不太明白为什么要一直改变后的长度大于改变之前的,因为是在原字符做的呀,当不大于时保持原状就可以了,没有必要还复制嘛。
结果图如下: