题目:写一个函数,将字符串中的空格替换为%20。样例: “abc defg” 转换成“abc%20defg” 【C语言实现】
**要求:**在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串。
**分析:**如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖。那么我们就考虑从后往前进行替换。
步骤: 1>首先遍历原字符串,找出字符串的长度以及其中的空格数量
2>根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。
3>设置两个指针 src 和 dst 分别指向原字符串和新字符串的末尾位置。
4>如果 src 指向内容不为空格,那么将内容赋值给 dst 指向的位置,
如果 src 指向为空格,那么从 dst 开始赋值 “02%”
直到 src==dst 时表明字符串中的所有空格都已经替换完毕。
具体代码如下:
#include <stdio.h>
#include <string.h>
#include <assert.h>
void replace_space(char *str)
{
assert(str);
int len = strlen(str); //原字符串的长度
int newlen = 0;
int blank = 0; //空格的数量
char *dst = NULL;
char *src = NULL;
char *p = str;
//首先遍历原字符串,找出字符串的长度以及其中的空格数量
while (*str++ != '\0')
{
if (*str == ' ')
{
blank++;
}
}
str = p;
//根据原字符串的长度和空格数量我们可以求出新字符串的长度
newlen = len + 2 * blank;
//设置的两个指针指向原字符串和新字符串的末尾位置
dst = str + newlen - 1;
src = str + len - 1;
while (src != dst) //两指针相同时,跳出循环
{
if (*src == ' ') //如果src指向空格,那么从dst开始赋值“02%”
{
*dst-- = '0';
*dst-- = '2';
*dst-- = '%';
src--; //将src前移,为了下一次的执行
}
else
{
*dst-- = *src--;//如果src指向内容不为空格,那么将内容赋值给dst指向的位置
}
}
}
int main()
{
char str[30] = "we are happy";
replace_space(str);
printf("%s\n", str);
system("pause");
return 0;
}