ZeroJudge C007: TeX Quotes

同題:UVa 00272 – TeX Quotes

TeX 是一種由 Donald Knuth 所發展出的一套文書排版軟體。這套軟體可以將原始文件檔加上一些像字型等型態後,轉成一份很漂亮的文件。而一份漂亮的文件是需要用 和 ” 來把別人說的話給「引」出來,而不是用大部份鍵盤上有的 ” 。雖然鍵盤裡通常不會有這種有方向的雙引號鍵,不過上面有左單引號`(有人叫 Backquote),和右單引號 ‘ (有人叫 Apostrophe 或 Quote)。你可以在你的鍵盤上找一下,不過要小心不要將 ` 與 \ (Backslash 鍵) 搞混了。而在 TeX 裡,使用者可以輸入兩個左單引號 來構成一個左雙引號 “ ,或者是兩個右單引號 ” 來構造一個右單引號 ” ,不過呢,通常大家打字時都很習慣用普通的雙引號 ” 來引述別人的話。

如果原始文件檔內容是:

“To be or not to be,” quoth the bard, “that is the question.”

則 TeX 作出來的文件並不會是我們所想要的:

To be or not to be,” quoth the bard, that is the question.”

為了要得到上面的文件,我們需要把原始文件變成這個樣子:

To be or not to be,” quoth the bard, that is the question.”

你現在必須要寫一個程式,將普通的雙引號(”),轉成有方向性的雙引號,而其它文字則不變。而在把普通的雙引號換掉的時候,要特別注意,當要開始引述一句話時要用 ,而結束引述時要用 ” 。不用擔心會有多層巢狀引號的情形,也就是第一個引號一定是用 來代替,再來用 ”,然後用 “ ,接著用 ” ,依此類推。

範例測資

範例輸入範例輸出
EOF 輸入,每筆資料有一個包含空格字元的字串。
輸出的文字必須和輸入的一模一樣,除了:
每一組雙引號的第一個 ” 必須用兩個 ` 字元(就是 “ )來代替
每一組雙引號的第二個 ” 必須用兩個 ‘ 字元( 就是 ”)來代替。
輸出更新後的字串。
“To be or not to be,” quoth the Bard, “that
is the question”.
The programming contestant replied: “I must disagree.
To C' or not toC’, that is The Question!”
“To be or not to be,” quoth the Bard, that
is the question”.
The programming contestant replied: “I must disagree. To `C’ or not to `C’, that is The Question!”
ZeroJudge C007 範例測資

解題思路

使用 Getline 來收每一個字串,並且用 For迴圈 確認每一個字元,如果判斷到目前字元為「”」,可以宣告一個布林值預設為 True,如果布林值為 True,輸出「“」並將布林值設為 False,如果布林值為 False,輸出「”」並將布林值設為 True。

需要注意的是這個布林值要宣告在 EOF 的外面。

範例程式碼-ZeroJudge C007: TeX Quotes

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str;
    bool start = true;
    while (getline(cin, str))
    {
        for (int i = 0; i<str.length(); i++)
        {
            if (str[i] == '"')
            {
                if (start)
                {
                    cout << "``";
                    start = false;
                }
                else
                {
                    cout << "''";
                    start = true;
                }
            }
            else cout << str[i];
        }
        cout << "\n";
    }
}

//ZeroJudge C007
//Dr. SeanXD

發佈留言