2013-05-21 63 views
1

我有代碼使用cin.get(input, c)其中c是分隔符字符。它在極少數情況下失敗,因爲有另一個字符用作逃跑。所以,如果c跟隨e,我想要cin.get轉到下一個c,而不是轉義的ccin.get與轉義字符

我目前正在檢查cin.get的最後一個字符是否爲e,如果是,請附加另一個cin.get。有沒有辦法將轉義字符添加到cin.get,所以我不需要額外檢查轉義字符?

+3

簡答題:沒有。 –

+1

你的意思是你想讀一個字符,如果它是一個反斜槓然後讀另一個字符並將這兩個字符轉換爲一個C++字符轉義碼?如果是這樣的話,那麼你不能那樣做。至少不用一個'get'調用,你需要兩個。 –

回答

3

如果你想要這樣的行爲,你需要自己實現它。它不是內置到cin.get

至少在理論上,iostreams庫確實提供了一個插入這種邏輯的合理位置,所以它將像流的一部分一樣起作用。具體而言,iostream具有關聯的locale,並使用語言環境的codecvt構面將文件中字符的外部表示轉換爲字符的內部表示,因爲程序可以看到它們。您可以可以在自定義codecvt構面中執行此轉換。

雖然這有一個相當重要的問題 - 寫一個codecvt方面是相當痛苦的。試圖將這種轉換作爲編解碼方面來寫,而不是在閱讀之後做這項工作,就好像將代碼量加倍,至少是涉及的難度的三倍。

該投資可以還清 - 將轉換打包到codecvt方面可以使它更容易集成到多個程序中。如果你真的希望在許多程序中使用這種特殊轉換,將它打包到一個方面可能是有道理的。如果(因爲我猜是這裏的情況),你不太可能在其他程序中使用它,它可能是可能不值得的麻煩。