题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
C++实现
1:(新字符串长度为下标)从后往前输出新的字符,如果是空格输出 0 2 %,否则直接输出原字符
2:新字符串长度=输入长度+空格数量*2
(C语言字符串规定,字符串长度是指从字符串开始,到字符串结束符(\0)为止,所有字符的总数,不包括\0. 这里的所有字符,同样包括不可见字符,自然包括空格)
1 class Solution { 2 public: 3 void replaceSpace(char *str,int length) { 4 5 6 //遍历一边字符串找出空格的数量 7 if(str==NULL||length<0) 8 return ; 9 int i=0;10 int oldnumber=0;//记录以前的长度11 int replacenumber=0;//记录空格的数量12 while(str[i]!='\0')13 {14 oldnumber++;15 if(str[i]==' ')16 {17 replacenumber++;18 }19 i++; 20 }21 int newlength=oldnumber+replacenumber*2;//插入后的长度22 if(newlength>length)//如果计算后的长度大于总长度就无法插入23 return ;24 int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里25 int pNewlength=newlength;26 while(pOldlength>=0&&pNewlength>pOldlength)//放字符27 {28 if(str[pOldlength]==' ') //碰到空格就替换29 {30 str[pNewlength--]='0';31 str[pNewlength--]='2';32 str[pNewlength--]='%';33 34 }35 else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置36 {37 str[pNewlength--]=str[pOldlength];38 39 }40 pOldlength--; //不管是if还是elsr都要把pOldlength前移41 42 }43 44 45 }46 };
java实现
1 public class Solution { 2 public String replaceSpace(StringBuffer str) {3 4 return str.toString().replaceAll(" ", "%20");5 }6 }