描述 【牛客网-替换空格简单解答】请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
替换空格_牛客题霸_牛客网
本道题的思路可以理解为我们先将整个字符串中的空格数量找到,然后按照我们空格的数量来计算我们新生成的数组所需要的空间的大小。(原来字符串中为' '的地方我们全部需要替换为%20,所以,我们统计了空格的个数之后,增长的字符串长度为空格的个数×(3-1))
第二部,我们需要安排两个尾指针,一个len1指向原来的字符串的末位位置,另一个len2指向我们新生成的字符串的末位位置,然后如果len1和len2都不是空的字符,我们就将len1所指向的字符赋值给len2所指向的位置。如果len1所指向的位置为' '(空格),那么我们len2指针所指向的位置需要将'%20‘放入,也就是说要往前走三步,与此同时,len1往前走一步。
最后,当我们的len1和len2所指向的位置相同的时候,就代表我们的字符串中的空格全部都被替换完成了,此刻就可以结束我们的程序了
class Solution {
public:
void replaceSpace(char *str,int length) {
//数空格
int spacecnt=0;
char*p=str;
while(*p)
{
if(*p==' ')
spacecnt++;
p++;
}
int newlen=length+2*spacecnt;
//计算新的长度的个数
int end1=length-1;
int end2=newlen-1;
while(end1!=end2)
{
if(str[end1]!=' ')
{
str[end2--]=str[end1--];
}
else
{
str[end2--]='0';
str[end2--]='2';
str[end2--]='%';
end1--;
}
} }
};
文章图片
推荐阅读
- 浅谈C语言中的文件操作函数
- C中的char s[]和char *s有什么区别()
- C和C++之间有什么区别(有哪些区别?)
- c++|c语言和c++中的动态内存申请与释放
- C/C++中的void指针介绍和用法解析
- 项目攻坚|俄罗斯方块【六种模式】【c语言】【史上最强】
- 笔记|数据结构->二叉树的介绍
- 笔记|堆排序详解+TOP-K问题
- 笔记|堆的实现+堆排序