王道训练营day04将字符串中空格替换成%20

尽可能不开辟新数组空间

主要思想是,计算出需要的足够空间,从后往前改变

//计算需要的足够空间,从后往前改变
void replace_space(char* str) {
	char* p = str;
	char* p_start = str;
	char* p_end = str;
	int space_num = 0;
	int size = 0;
	while (*p_end) {
		if (*p_end == ' ') {
			space_num++;
		}
		p_end++;
	}
	size = strlen(str) + space_num * 2;//一个字符变成3个字符
	p = str + size ;//p指向预留空间后,最后的字符处,不要-1,要为\0留出位置


	while (p_start < p_end) {
		if (*p_end == ' ') {
			*p = '0';
			*(p - 1) = '2';
			*(p - 2) = '%';
			p = p - 3;
		}
		else {
			*p = *p_end;
			p--;
		}


		p_end--;
	}
	puts(str);


}
int main() {
	char str[100];
	//scanf("%s", str);//scanf %s接受不了空格
	char* find;
	fgets(str, 100, stdin);
	if (find = strchr(str, '\n')) {//特殊处理一下fgets吞下的回车,有点烦人
		*find = '\0';
	}
	replace_space(str);
	system("pause");

	return 0;

}

最开始的p_end是从\0开始的,也正是如才能正常输出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值