替换空格为%20
Posted 做1个快乐的程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换空格为%20相关的知识,希望对你有一定的参考价值。
描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目分析:原字符串是包含空格的,而变化之后的字符串长度增加,且将空格替换为%20。
法一:我们直接利用C++的string,创建一个string类的对象,然后遍历原字符串,当遇到非空格时,即在string类对象的末尾插入字符,若遇到空格,则在string类对象的末尾插入“%20”字符串。
class Solution {
public:
void replaceSpace(char *str,int length) {
//创建一个string类的val对象
string val;
//遍历原字符串
for(size_t i = 0; i < length; i++)
{
//当遇到非空格时,将原字符串对应位置的字符尾插到val对象上
if(str[i] != ' ')
val.push_back(str[i]);
//当遇到空格时,将“%20”字符串尾插到val对象上
else
val.append("%20");
}
//最后检验的时str,所以我们将val进行拷贝,拷贝给str。
strcpy(str, val.c_str());
}
};
法二:通过移动字符串的方式,我们可以通过计算空格的个数,得出替换后的字符串应有的大小,然后将原字符串的数据依次后移,当遇到空格时,依次插入‘0’、‘2’、‘%’即可。
class Solution {
public:
//此函数用于获取字符串中空格的个数
int spaceNum(char* arr,int sz)
{
int count = 0;
for(size_t i = 0; i < sz; i++)
{
if(arr[i] == ' ')
count++;
}
return count;
}
void replaceSpace(char *str,int length) {
//获取空格的个数
int space_count = spaceNum(str,length);
//新字符串的长度
//原始字符串长度 + 空格个数 * 2 = 替换后的字符串长度
int new_size = length + (space_count * 2);
//定义两个char类型的指针,old_ptr指针指向原字符串长度的末尾
//new_ptr指针指向替换字符串后新长度的末尾
char* old_ptr = str + length;
char* new_ptr = str + new_size;
//进入循环,依次往后挪动数据
while(old_ptr >= str && new_ptr >= str)
{
if(*old_ptr == ' ')
{
*new_ptr-- = '0';
*new_ptr-- = '2';
*new_ptr-- = '%';
old_ptr--;
}
else
*new_ptr-- = *old_ptr--;
}
}
};
其实这个题还有其他做法,在这里不推荐,因为比较繁琐,比如:使用c的一些内置函数,然后把字符串分割再拼接。
以上是关于替换空格为%20的主要内容,如果未能解决你的问题,请参考以下文章