替换空格

题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 题意:注意这里有两种意思,一是可以创建新的字符串,二是在原字符串上修改

思路:第一种情况,只要从左到右遍历字符串,将空格换成"%20"即可,第二种,因为替换以后字符串长度会变化,所以要注意原字符串的长度是否足够。针对第二种解题步骤如下:

一、遍历一遍字符串,找到现字符串的长度和空格长度,这样就可以计算出替换以后的新字符串的长度;

二、定义两个指针,一个指向新字符串的最后,一个指向现有的最后,注意现有字符串中的''也要复制过去

三、从右往左遍历现有字符串,将非空格的字符复制到新的位置,遇到空格替换即可。

代码如下:

 1 class Solution {
 2 public:
 3     void replaceSpace(char *str,int length) 
 4     {
 5         if(str==nullptr||length<=0)    return;
 6         int oldLen=0;
 7         int numOfBlank=0;
 8         int i=0;
 9         while(str[i] !='')
10         {
11             ++oldLen;
12             if(str[i]==' ')
13                 numOfBlank++;
14             i++;
15         }
16         int newLen=oldLen+numOfBlank*2;  //新长度
17         if(length<newLen)   return;
18         while(oldLen>=0)           //‘’也要复制
19         {
20             if(str[oldLen]==' ')
21             {
22                 str[newLen--]='0';
23                 str[newLen--]='2';
24                 str[newLen--]='%';
25             }
26             else
27             {
28                 str[newLen--]=str[oldLen];
29             }
30             oldLen--;
31         }
32     }
33 };

 //length为字符串str的总容量。着重注意从后往前的思路。

原文地址:https://www.cnblogs.com/love-yh/p/7356756.html