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();
}

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

发布了58 篇原创文章 · 获赞 3 · 访问量 2174

猜你喜欢

转载自blog.csdn.net/weixin_43936250/article/details/103997255