替换空格
题:请实现一个函数,将一个字符串中的空格替换成“%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<newLen) return; 18 while(oldLen>=0) //‘\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的总容量。着重注意从后往前的思路。