题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%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 }