1. 程式人生 > >【劍指offer面試題】--替換空格

【劍指offer面試題】--替換空格

請實現一個函式,將一個字串中的每個空格替換成“%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++; } } };