C语言:替换空格

题目: 请实现一个函数,把字符串中的每个空格替换成 “%20”。 例如,输入 “We are happy”, 则输出 “We%20are%20happy” 。

这道题目有两种思路。

如果可以建立新字符串,就可以依次比较原字符串中的数组,当某位字符不为空时,直接复制该字符;当某位字符为空,依次赋值:’%’、‘2’、‘0’。

如果要在原字符串上进行修改,核心思想是从后往前寻找空格,进行替换,我采用的是覆盖原字符串的方法。
编写完函数后,我一共写了6个测试用例,分别测试:

  1. 空格在中间
  2. 空格在前面
  3. 空格在后面
  4. 无空格
  5. 字符串为空
  6. 字符串是一个空指针

这6种情况下,函数是否能正确实现功能。

#include<stdio.h>
#define STR_LEN 50

void Replace_Space(char *string) {

	if (string == NULL)
		return;

	int i = 0;
	int space_count = 0;
	int original_len = 0;

	while (string[i] != '\0') {

		original_len++;

		if (string[i] == ' ') {
			space_count++;
		}
		i++;
	}

	int new_len = original_len + space_count * 2;

	if (new_len >= STR_LEN)
		return;

	for (int i = original_len - 1; i >= 0; i--) {
		if (string[i] == ' ') {
			string[new_len - 1] = '0';
			string[new_len - 2] = '2';
			string[new_len - 3] = '%';
			new_len = new_len - 3;
		}
		else {
			string[new_len - 1] = string[i];
			new_len--;
		}			
	}
	
}


void test1() {
	char string[STR_LEN] = "We are happy";

	Replace_Space(&string);

	printf("test1:空格在中间:%s\n", string);
}

void test2() {
	char string[STR_LEN] = " Wearehappy";

	Replace_Space(&string);

	printf("test2:空格在前面:%s\n", string);
}

void test3() {
	char string[STR_LEN] = "Wearehappy ";

	Replace_Space(&string);

	printf("test3:空格在后面:%s\n", string);
}

void test4() {
	char string[STR_LEN] = "hello";

	Replace_Space(&string);

	printf("test4:无空格:    %s\n", string);
}

void test5() {
	char string[STR_LEN] = "";

	Replace_Space(&string);

	printf("test5:字符串为空:    %s\n", string);
}

void test6() {
	char* string = NULL;

	Replace_Space(&string);

	printf("test6:字符串是一个空指针:%s\n", string);
}

void main() {

	test1();
	test2();
	test3();
	test4();
	test5();
	test6();
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值