题目: 请实现一个函数,把字符串中的每个空格替换成 “%20”。 例如,输入 “We are happy”, 则输出 “We%20are%20happy” 。
这道题目有两种思路。
如果可以建立新字符串,就可以依次比较原字符串中的数组,当某位字符不为空时,直接复制该字符;当某位字符为空,依次赋值:’%’、‘2’、‘0’。
如果要在原字符串上进行修改,核心思想是从后往前寻找空格,进行替换,我采用的是覆盖原字符串的方法。
编写完函数后,我一共写了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();
}
运行结果: