将字符串中的空格替换为%20
比如 “abc defgx yz"转换为"abc%20defgx%20yz”
这里考虑的思路是利用字符数组,现在的"用户需求是将空格替换为20%",原来的空格处只占一个字符,但现在我们需要3个字符的空间,因此我们需要扩大字符数组的size,当然如果我们预先给定足够大的字符数组的size, 我们要做的只需更新size的值即可,当然记得保留原来的size.
其实本质上是利用指针的思想,只不过这里简化为了字符数组访问下标.
让一个指针指向更新后的size的末尾(NewBack)
一个指针指向原来size的末尾(OldBack)
同时向前移动,在移动的同时将OldBack位置的字符赋给NewBack位置
在不断前移赋值的过程中,OldBack会遇到空格,这就意味着此时需要我们替换空格
此时要注意,我们现在模拟的是指针前移的过程,所以想要将’ ‘替换为"%20",我们需要依次实现(就是要先将’0’赋值,再是’2’,最后是’%’)
对应代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//将字符串中的空格替换为%20
//比如 "abc defgx yz"转换为"abc%20defgx%20yz"
void ReplaceChar(char* string, int len){
if (len <= 0){
return;
}
int i;
int count = 0;
int size;
for (i = 0; i < len; ++i){
if (string[i] == ' '){
++count; //遍历字符数组,输出空格个数
}
}
size = len + count * 2; //通过空格个数计算出新的szie
if (size == len){
return; //这个表示原字符串中不含有空格
}
int NewBack = size - 1; //新空间的末尾
int OldBack = len - 1; //旧空间的末尾
while (OldBack >= 0 && NewBack > OldBack){
if (string[OldBack] == ' '){
string[NewBack--] = '0';
string[NewBack--] = '2';
string[NewBack--] = '%';
OldBack--;
}
else {
string[NewBack--] = string[OldBack--];
}
}
}
int main(){
char string[100] = "You are a good man!";
int n = strlen(string);
ReplaceChar(string, n);
puts(string);
system("pause");
return 0;
}