题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
实现代码
错解:
class Solution { public: void replaceSpace(char *str,int length) { if(str == nullptr ||length<= 0){ return; } int OLenth = 0; int spaceLenth = 0; int i = 0; while(str[i] != ' '){ ++OLenth; if(str[i] == ' '){ spaceLenth+=1; } ++i; } int AllLenth = spaceLenth*2 +OLenth; int Olenth2 = OLenth; //int spaceLenth2 = spaceLenth; if(AllLenth >length){ return; } while(Olenth2 >= 0 && Olenth2 < AllLenth ){ if(str[Olenth2] ==' '){ str[AllLenth--] = '0'; str[AllLenth--] = '2'; str[AllLenth--] = '%'; } str[AllLenth--] == str[Olenth2]; --Olenth2; } } }; --------- 不通过 您的代码已保存 答案错误:您提交的程序没有通过所有的测试用例 case通过率为0.00% 测试用例: "hello world" 对应输出应该为: "hello%20world" 你的输出为: "hello%20rld"
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354正解:
class Solution { public: void replaceSpace(char *str,int length) { if(str==NULL) return ; int CountOfBlanks=0; int Originallength=0; for(int i=0;str[i]!=' ';i++) { Originallength++; if(str[i]==' ') ++CountOfBlanks; } int len =Originallength+2*CountOfBlanks; if(len+1>length) return ; /* int pOrignallength=orignallength; int pNewlength=newlength; while(pOrignallength>=0 && pNewlength>pOrignallength) { if(str[pOrignallength]==' ') { str[pNewlength--]='0'; str[pNewlength--]='2'; str[pNewlength--]='%'; } else { str[pNewlength--]=str[pOrignallength]; } pOrignallength--; } */ char*pStr1=str+Originallength;//复制结束符‘ ’ char*pStr2=str+len; while(pStr1<pStr2) { if(*pStr1==' ') { *pStr2--='0'; *pStr2--='2'; *pStr2--='%'; } else { *pStr2--=*pStr1; } --pStr1; } } };
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152终于一点点排查出错误来了。
str[AllLenth–] == str[Olenth2];为手误。
应改为
str[AllLenth–] = str[Olenth2];
此乃编程之大过。
谨记·!