【劍指offer面試題】--替換空格
阿新 • • 發佈:2019-02-10
請實現一個函式,將一個字串中的每個空格替換成“%20”。 例如,當字串為We Are Happy. 則經過替換之後的字串為We%20Are%20Happy。
面試題中所給的函式頭是:
void replaceSpace(char *str,int length)
char* str 則是題目所給的字串,而長度呢,應該就是可以儲存的最大長度。如果是字串常量那就沒辦法擴容,而且給length 也就沒有意義了,因為我們用strlen()就可以求出長度了。
思路:
1.我們先求出現在為改變時字串的長度,在遍歷中求出空格的長度從而算出改變後的長度,如果長度>length則替換失敗。
2.然後遍歷找空格進行空格的替換,首先要把空格後的字元依存後移,給%20挪出空間記住只需要挪動兩個空間,因為%號替換空格就可以了
cur 遍歷用,oldlength原字串長度,blanklength空格長度
end 挪動資料時要從最後一位開始挪,所以end標誌的最後一位的位置。\0也要挪哦~
class Solution {
public:
void replaceSpace(char *str,int length) {
int oldlength = 0;
char* cur = str;
int blanklength = 0;
while(cur[oldlength] != '\0')
{
if(cur[oldlength]==' ')
blanklength++;
oldlength++;
}
if (oldlength + 1 + blanklength*2 > length)
return;
cur = str;
char* end = str + oldlength;
int i = 0;
while(cur[i] != '\0')
{
if(cur[i] == ' ')
{
cur[i]='%';
char* pushflort = end;
while (pushflort > cur + i)
{
*(pushflort+2) = *pushflort;
pushflort--;
}
end += 2;
cur[++i] = '2';
cur[++i] = '0';
}
i++;
}
}
};