例:
转换前:Hello World
转换后:Hello%20World
思路:
(1)「%20」比空格多 2 个,所以要保证原字符数组空间充足
(2)转换后数组大小比转换前多「空格数 * 2」个字节
(3)创建两个变量,分别可以指向原字符串末尾、扩充后字符串末尾
(4)从后向前,将原字符串赋值给扩充后字符串
(5)遇到空格原字符串跳过空格,扩充后字符串赋值特殊值,所以会前进地比原字符串快,赋值完最后一个特殊值,两字符串会指向同一位置,此时结束,完成赋值
实现:
void change(char* s, int len)
{
int count = 0;//记录空格个数
char* tmp = s;//防止找空格时改变原字符串
while (*tmp)
{
if (*tmp == ' ')
count++;
tmp++;
}
int end1 = len;//指向字符串末尾
int end2 = len + 2 * count;//指向扩充后字符串末尾
while (end1 != end2)
{
if (s[end1] != ' ')//如果没遇到空格,直接将最后一个字符串进行赋值
{
s[end2--] = s[end1--];
}
else//如果遇到空格
{
end1--;//跳过空格
s[end2--] = '0';//赋值
s[end2--] = '2';
s[end2--] = '%';
}
}
}