gpt4 book ai didi

c++ - 文件处理 :What is the use of peek() function in c++?

转载 作者:行者123 更新时间:2023-11-30 02:35:20 24 4
gpt4 key购买 nike

由于我在处理文件的 eof 时遇到很多问题,每当我使用 fstream 编码并且出现 eof 时,我必须清除流以便使用该流。虽然我已经搜索了很多关于 eof 的内容,但我得到了我应该开始使用的结果:

fstream file("Filename.txt",ios::in|ios::ate|ios::out);
char str[80];
while(file>>str)
{
//do the required stuff
}
//clear the stream and reuse it
file.clear();
file.seekp(0);

但我也读到了一个名为 peek() 的函数,它也用于此类目的,但我对它的工作有点困惑,我无法在代码中应用它。因此,如果有人可以指导我完成此操作。

我还听说过一个叫做 putback() 的函数,那是什么??

编辑-1

fstream file("Filename.txt",ios::in|ios::ate|ios::out);
char str[80];
while(file>>str)
{
//do the required stuff
}
//clear the stream and reuse it
file.clear();
file.seekp(0);
//Now do the required writing operation after reading the whole file wherever is required
//I also want to perform writing operations and if this pattern seems most suitable for me

最佳答案

假设您想为 C 或 C++ 编写解析器,并且您的代码执行如下操作:

 char c = source.get();
switch(c)
{
...
case '<':
// May be < or <=
if (source.peek() == '=')
{
source.get();
return less_or_equal;
}
// Ok, not <= so:
return less;
...
}

[我忽略了它可能是模板、类次或其他类似内容的一部分]

需要putback()当你有 peek() 时很少,但它确实允许“通常消耗”该字符的代码“如果它弄错了”将其放回原处。假设你知道 <=< 更常见,那么你可以这样做:

 char c = source.get();
switch(c)
{
...
case '<':
// May be < or <=
c = source.get();
if (c == '=')
{
source.get();
return less_or_equal;
}
source.putback(c);
// Ok, not <= so:
return less;
...
}

因为它只做 putback在极少数情况下 [根据上面假设的统计数据]。

可以想象常见的情况是 get并且罕见的情况是不匹配,例如如果我们想读取一个数字:

  int number = 0;
do
{
char c = input.get();
if (isdigit(c))
{
number *= 10;
number += c - '0';
}
else
{
input.putback(c);
}
while( isdgit(c) );

因为大多数数字中都有不止一个数字,更常见的情况是第一个和后面的字符都是数字,不常见的情况是我们需要调用putback()。 . [当然,“正确”阅读数字需要更多的东西......]

关于c++ - 文件处理 :What is the use of peek() function in c++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740689/

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