劍指Offer——替換空格
阿新 • • 發佈:2017-10-26
char col happy 無法 pub 字符 code 實現 如果
題目描述:
請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之後的字符串為We%20Are%20Happy。
分析:
如果從前往後替換空格,那麽每遇到一個空格就需要將還沒遍歷到的字符後移,總的移動步數將會很多。
所以我們考慮先求出替換空格之後的字符串的長度,再從後往前遍歷進行替換,將會大大減少替換的次數,也不會覆蓋還沒遍歷的字符。
代碼:
1 class Solution { 2 public: 3 void replaceSpace(char *str, int length) { 4 int oldLength = strlen(str); //沒替換前的字符串長度 5 int newLength = oldLength; 6 for(int i = 0; i < oldLength; i++) { // 求出替換空格後的字符串長度 7 if(str[i] == ‘ ‘) 8 newLength += 2; 9 } 10 if(newLength > length) return; // 新長度超過限制的最長長度,則無法替換 11 while(oldLength >= 0 && newLength > oldLength) { //從後往前替換空格 12 if(str[oldLength] == ‘ ‘) { 13 str[newLength--] = ‘0‘; 14 str[newLength--] = ‘2‘; 15 str[newLength--] = ‘%‘; 16 oldLength--; 17 } else { 18 str[newLength--] = str[oldLength--]; 19 }20 } 21 } 22 };
劍指Offer——替換空格