【C/C++】将字符串中间的空格替换为"%20"

一、为什么会出现这道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;	
} 

运行结果:


 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值