題目:請實現一個函數,將一個字符串中的空格替換成“%20”

/*
題目描述
請實現一個函數,將一個字符串中的空格替換成“%20”。
例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。
*/
/*
分析
將長度爲1的空格替換爲長度爲3的“%20”,字符差的產度變長。
如果允許我們開闢一個新的數組來存放替換空格後的字符串,
那麼這道題目就非常簡 單。設置兩個指針分別指向新舊字符串首元素,
遍歷原字符串,如果碰到空格就在新字符串上填入“%20”,
否則就複製元字符串上的內容。但是如果面試官要求
在原先的字符串上操作,並且保證原字符串有足夠長的空間來存放替換後的字符串,
那麼我們就得另想方法。
如果從前往後替換字符串,那麼保存在空格後面的字符串肯定會被覆蓋,
那麼我們就考慮從後往前進行替換。
首先遍歷原字符串,找出字符串的長度以及其中的空格數量,
根據原字符串的長度和空格的數量我們可以求出最後新字符串的長度。
設置兩個指針point1和point2分別指向原字符串和新字符串的末尾位置。
如果point1指向內容不爲空格,那麼將內容賦值給point2指向的位置,
如果point1指向爲空格,那麼從point2開始賦值“02%”
直到point1==point2時表明字符串中的所有空格都已經替換完畢。
*/

/*
Time:2016-9-8 15:48:57
Author:CodingMengmeng
*/
#include <iostream>
using namespace std;
//length爲系統規定字符串輸出的最大長度,固定爲一個常數
class Solution {
public:
    void replaceSpace(char *str, int length){
        int blankNumber = 0;//空格的數量
        int oldstringLen;//記錄原字符串的長度
        //首先遍歷原字符串,找出字符串的長度以及其中的空格數量
        for (oldstringLen = 0; str[oldstringLen] != '\0'; oldstringLen++){

            if (str[oldstringLen] == ' ')
                blankNumber++;
        }

        //根據原字符串的長度和空格的數量我們可以求出最後新字符串的長度
        int newstringLen = oldstringLen + blankNumber * 2;//新字符串的長度
        if (newstringLen>length)
            return;
        str[newstringLen] = '\0';//此行很重要,因爲原字符串最後一個字符爲'\0'

        //設置兩個指針point1和point2分別指向原字符串和新字符串的末尾位置
        int point1 = oldstringLen - 1, point2 = newstringLen - 1;//因爲'\0'已經手工加到最後新串的最後一個字符,所以減1咯

        while (point1 >= 0 && point2>point1){//兩指針相同時,跳出循環

            if (str[point1] == ' '){//如果point1指向爲空格,那麼從point2開始賦值“02%”
                str[point2--] = '0';
                str[point2--] = '2';
                str[point2--] = '%';

            }
            else    //如果point1指向內容不爲空格,那麼將內容賦值給point2指向的位置
                str[point2--] = str[point1];

            point1--;//不管是if還是else都要把point1前移,爲了下一次的執行

        }


    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章