我正在使用一個istringstream
逐字讀取string
。但是,當我的條件失敗時,我需要能夠將istringstream
恢復到上一個單詞被讀取之前。我的示例代碼有效,但我想知道是否有更直接的方式來使用流來完成此操作。如何保存和恢復std :: istringstream的緩衝區?
std::string str("my string");
std::istringstream iss(str);
std::ostringstream ossBackup << iss.rdbuf(); // Writes contents of buffer and in the process changes the buffer
std::string strBackup(ossBackup.str()); // Buffer has been saved as string
iss.str(strBackup); // Use string to restore iss's buffer
iss.clear(); // Clear error states
iss >> word; // Now that I have a backup read the 1st word ("my" was read)
// Revert the `istringstream` to before the previous word was read.
iss.str(strBackup); // Restore iss to before last word was read
iss.clear(); // Clear error states
iss >> word; // "my" was read again
那麼,這似乎取決於你如何定義_「當我的情況失敗」_完全。你可以檢查'operator >>()'操作留下的值,並且設置流狀態失敗。這是一個[示例](http://stackoverflow.com/questions/24504582/test-whether-stringstream-operator-has-parsed-a-bad-type?noredirect=1#comment37965807_24504582)。 – 2014-10-06 18:28:58