同題: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