这是一个典型的双指针问题
一. 问题描述
请实现一个函数,将一个字符串中的每个空格替换成“%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; }
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏
希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯