【发布时间】:2014-12-01 01:45:01
【问题描述】:
我正在使用istringstream 逐字阅读string。但是,当我的条件失败时,我需要能够将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>>()操作留下的值,并将流状态设置为失败。这是用于这种方法的example。
标签: c++ istringstream