题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
- 先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。
- 从字符串的后面往前开始复制和替换。
准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾。接下来向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。接着向前复制,直到碰到第二、三或第n个空格。
Demo:
void replaceSpace(char str[], int length)
{
int i = 0, cnt = 0, orglen = 0;
while (str[i] != '\0') // 统计出字符串中空格的总数
{
orglen++;
if (str[i] == ' ') cnt++;
i++;
}
int newlen = orglen + cnt * 2;// 计算出替换之后的字符串的总长度
int p1 = orglen;
int p2 = newlen;
// p1指向原始字符串的末尾,而p2指向替换之后的字符串的末尾
while (p1 >= 0 && p2 > p1)
{
if (str[p1] != ' ') str[p2--] = str[p1];
else
{
str[p2--] = '0'; str[p2--] = '2'; str[p2--] = '%';
}
p1--;
}
}