我的程序使用以下方法从文本文件中读取一行:
std::ifstream myReadFile("route.txt");
getline(myReadFile, line)
如果它找到了我正在寻找的东西(标签),它会将该行存储在临时字符串中。我不想继续这个,直到我找到一些其他标签,如果我找到另一个标签,我希望能够返回到前一行,以便程序读取再次作为其他标签,并做其他事情。
我一直在看putback()和unget()我对如何使用它们感到困惑,如果它们可能是正确的答案。
答案 0 :(得分:9)
最好是考虑一次性算法,该算法在内存中存储第一个标签可能需要的内容而不返回。
如果无法做到这一点,你可以"书签"流位置,稍后通过tellg()
和seekg()
streampos oldpos = myReadFile.tellg(); // stores the position
....
myReadFile.seekg (oldpos); // get back to the position
如果您阅读递归嵌入式标签(例如html),您甚至可以使用stack<streampos>
在阅读时推送和弹出位置。但是,请注意,此类前向/后向访问会降低性能。
答案 1 :(得分:1)
到目前为止最容易的事情是,如果你只想要回退一行,总是要跟踪你之前和这一行的行。
维护一个存储当前行的cur
变量,以及存储前一行的prev
。当您移至下一行时,将cur
复制到prev
,然后将新行读入cur
。
这样,您始终可以使用上一行。