问题重述:
题目:请实现一个函数,把字符串中每个空格替换成“%20”,例如输入“We are happy.”,则输出“We%20are%20happy.”。
思路解析:
首先遍历一遍整个字符串,统计出空格的个数。“We are happy.“长度为14,将一个空格变为“%20”后会增加两个长度。因此替换完之后整个字符串的长度会变为18.
然后设定两个指针,分别指向14 和 18 的位置,若前面的指针遇到字符,就将字符拷贝到后面的指针位置,然后指针前移,如果前面的指针碰到的空格,则后面的指针依次写入”0“ ”2“ ”%“。
代码实现:
void Replace(char *str, int lenth)
{
assert(str != NULL);
char *p1 = str;
int i = 0;
while (*p1 != '\0')
{
if (*p1 == ' ')
{
++i;
}
++p1;//p1走到最后
}
char *p2 = (p1 + 2 * i);//p2指向扩容的最后
while (p1 != p2)
{
if (*p1 == ' ')
{
*p2 = '0';
--p2;
*p2 = '2';
--p2;
*p2 = '%';
--p2;
--p1;
}
else
{
*p2 = *p1;
--p2;
--p1;
}
}
}
int main()
{
char str[50] = "We Are Happy";
Replace(str, strlen(str));
printf("%s", str);
return 0;
}
结果:。