ZeroJudge A520: Excessive Space Remover

同題:UVa 12416 – Excessive Space Remover

在像 Windows 記事本這類的編輯器中要如何移除連續的空白?我們可以重覆地以一個空白「全部取代」兩個連續的空白 (我們稱之為一個動作)。本題中你要模擬這個程序並回報需要幾個「全部取代」的動作。

比如說,如果你要移除「A very big joke.」中的連續空白,你需要兩個動作:

「A very big joke.」 -> 「A very big joke.」 -> 「A very big joke.」

範例測資

範例輸入範例輸出
EOF 輸入,每筆一行。每行含有字母、數字、標點符號及空白 (可能有前導空白,但不會有後置空白)。輸入中不會有 TAB 字元。輸入檔大小不會超過 1MB。對於每一行,印出移除所有連續空白所需的動作次數。
A very big joke.
Goodbye!
2
4

解題思路

使用 While 迴圈來進行動作,每次跑 For迴圈 從左到右判斷,每次都將字串加到一個新的字串,如果目前字元為空格且下一個字元也是空格,則將 i+1 來跳過下一個空格字元

需要注意不可以超過字串長度範圍,所以判斷時要先判斷目前是否已經跑到字串的最後一個字元。輸出跑 While 迴圈的次數 -1 即可。

範例程式碼-ZeroJudge A520: Excessive Space Remover

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str;
    while (getline(cin, str))
    {
        bool stop = false;
        string newstr;
        int count = 0;
        while (!stop)
        {
            newstr = "";
            stop = true;
            for (int i = 0; i<str.length(); i++)
            {
                newstr += str[i];
                if (str[i] == ' ' && i+1<str.length() && str[i+1] == ' ')
                {
                    i++;
                    stop = false;
                }
            }
            str = newstr;
            count++;
        }
        cout << count-1 << "\n";
    }
}

//ZeroJudge A520
//Dr. SeanXD

發佈留言