替换空格问题
替换空格问题
- 一. 问题描述
- 二. 思路分析
- 三. 代码展示
)
这是一个典型的双指针问题
一. 问题描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
二. 思路分析
我们先来做一个简单的问题 假设这个字符串只有一个空格
那么我们只需要从最后面开始分别输入
‘0’ ‘2’ ‘%’ 这三个字符就可以
我们可以发现 后来的字符串比原来的字符串长度长2
那么 如果是两个空格呢?
如果是三个空格呢?
我们通过研究可以发现 有多少个空格 那么后面一个字符串会比前面一个字符
多几个二
那么我们只要设立两个指针 一个指针指向改变后最后面的字符
一个指针指向改变前最后面的字符
让这两个指针分别 –
如果前面的一个指针遇到空格 那么后面的一个指针就往前移动并修改三个字符的内容
如果前面的一个指针遇到的不是空格 那么后面的一个指针就接受前面一个指针的内容
综上
三. 代码展示
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include<assert.h>
// 指针指向的是字符串的起始位置
// 长度就是整个字符串的长度
void typechange(char* str, int length)
{
int count = 0;
int i = 0;
char* tmp = str;
for (i = 0; i < length; i++)
{
if (*str == ' ')
{
count++;
str++;
}
str++;
}
int end1 = length - 1;
int end2 = length + 2 * count - 1;
while (end1!=end2)
{
if (tmp[end1] != ' ')
{
tmp[end2] = tmp[end1];
end2--;
end1--;
}
else
{
tmp[end2--] = '0';
tmp[end2--] = '2';
tmp[end2--] = '%';
end1--;
}
}
}
int main()
{
char arr[100] = "we are family";
// 要求 将所有的空格变成%20
typechange(arr, strlen(arr));
puts(arr);
return 0;
}
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏
希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯