一、为什么会出现这道C原因题目
浏览器中,不会直接传输空格
在IE浏览器中,将空格 转化为‘%’+空格的ASCI码
也就是“%20”,也就有了我们这道题
二、转化的思路
(1)设置一个计数器count,用于统计空格的数量
可以利用统计的count的大小,来求出‘g’偏移后的位置
看到这里
你可以会用一个while循环
遇到空格来计数器--,这样也可以
不过我们可以利用指针,具体看第二步
(2)设置两个指针,一个用于指向原来的‘\0’,另一个指向‘\0’偏移后的位置
当两个指针指向同一块地址时,停止!
三、具体实现
代码块:
#include<stdio.h>
#include<assert.h>
char* change(char* str)
{
assert(str != NULL);//断言,判断str知否指向空
char* pstr = str;//由于str要进行变化,以后还要用到,所以先把他用pstr存起来
int space_count = 0;//计数器
char* end = NULL;
char* end_new = NULL;
while(*str++!='\0')
{
if(*str == ' ')
space_count++;//进行空格计数
}
end = str;
end_new = end + 2*space_count;
str = pstr;
while(end != end_new)//当新结束指针和原结束指针不相等时
{
if(*end == ' ')//发现空格,变为“%20”
{
*end_new-- = '0';
*end_new-- = '2';
*end_new-- = '%';
end--;
}
else//否则进行赋值
{
*end_new-- = *end--;
}
}
return pstr;//将变化后的字符串的首地址返回
}
int main()
{
char str[128] = "welcome to my blog";
printf("%s",change(str));
return 0;
}
运行结果: