gpt4 book ai didi

c++ - 如何将 ifstream 返回到刚刚在 C++ 中读取的行的开头?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:04 25 4
gpt4 key购买 nike

在我使用 ifstream 从文件中读取一行后,有没有办法有条件地将流返回到我刚刚读取的行的开头?

using namespace std;
//Some code here
ifstream ifs(filename);
string line;
while(ifs >> line)
{
//Some code here related to the line I just read

if(someCondition == true)
{
//Go back to the beginning of the line just read
}
//More code here
}

因此,如果 someCondition 为真,则在下一次 while 循环迭代期间读取的下一行将是我现在刚刚读取的同一行。否则,下一个 while 循环迭代将使用文件中的以下行。如果您需要进一步说明,请随时询问。提前致谢!

更新#1

所以我尝试了以下方法:

while(ifs >> line)
{
//Some code here related to the line I just read
int place = ifs.tellg();
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
//More code here
}

但是当条件为真时它不会再次读取同一行。整数是这里可接受的类型吗?

更新 #2:解决方案

我的逻辑有问题。这是我希望对任何好奇的人都有效的更正版本:

int place = 0;
while(ifs >> line)
{
//Some code here related to the line I just read

if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
place = ifs.tellg();
//More code here
}

对 tellg() 的调用已移至末尾,因为您需要查找到先前读取行的开头。第一次我调用了 tellg() ,然后在流发生变化之前调用了 seekg() ,这就是为什么它看起来没有任何变化(因为它真的没有)。感谢大家的贡献。

最佳答案

没有直接的方式说“回到最后一行的开头”。但是,您可以使用 std::istream::tellg() 返回到您保持的位置。也就是说,在阅读一行之前,您将使用 tellg() 然后使用 seekg() 返回到该位置。

但是,频繁调用查找函数的开销相当大,也就是说,我会考虑取消再次读取行的要求。

关于c++ - 如何将 ifstream 返回到刚刚在 C++ 中读取的行的开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com