题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题意:注意这里有两种意思,一是可以创建新的字符串,二是在原字符串上修改
思路:第一种情况,只要从左到右遍历字符串,将空格换成"%20"即可,第二种,因为替换以后字符串长度会变化,所以要注意原字符串的长度是否足够。针对第二种解题步骤如下:
一、遍历一遍字符串,找到现字符串的长度和空格长度,这样就可以计算出替换以后的新字符串的长度;
二、定义两个指针,一个指向新字符串的最后,一个指向现有的最后,注意现有字符串中的'\0'也要复制过去;
三、从右往左遍历现有字符串,将非空格的字符复制到新的位置,遇到空格替换即可。
代码如下:
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] !='\0')10 {11 ++oldLen;12 if(str[i]==' ')13 numOfBlank++;14 i++;15 }16 int newLen=oldLen+numOfBlank*2; //新长度17 if(length=0) //‘\0’也要复制19 {20 if(str[oldLen]==' ')21 {22 str[newLen--]='0';23 str[newLen--]='2';24 str[newLen--]='%';25 }26 else27 {28 str[newLen--]=str[oldLen];29 }30 oldLen--;31 }32 }33 };
//length为字符串str的总容量。着重注意从后往前的思路。