【问题标题】:Ignoring remaining newlines and white space when reading input file (C++)读取输入文件时忽略剩余的换行符和空格(C++)
【发布时间】:2020-08-27 00:53:19
【问题描述】:

我有一个函数可以读取文本文件作为输入并将数据存储在向量中。

只要文本文件不包含任何额外的新行或空格,它就可以工作。

这是我目前拥有的代码:

std::ifstream dataStream;

dataStream.open(inputFileName, std::ios_base::in);
    
std::string pushThis;
while(dataStream >> pushThis){

    dataVector.push_back(pushThis);

}

例如:

安全的狼牙棒 诱饵

以上内容作为输入文本文件。

这不起作用:

安全的狼牙棒 诱饵

有没有办法在到达文件中的最后一个字符时停止流,同时仍然通过单词之间的空格保持分隔,以便将它们添加到向量、堆栈等内容中?

即一个向量将包含 ['safe', 'mace', 'bait', 'mate']

【问题讨论】:

  • dataStream >> pushThis 将在没有进一步帮助的情况下为您跳过所有空格,除非您对未显示的流做了一些事情。换句话说,我看不到问题所在。你应该已经得到了你想要的。
  • 同意。在 operator>> 读完最后一个单词 (mate) 之后,对 operator>> 的下一次调用将丢弃剩余的空格(包括换行符),直到到达 EOF,使流进入中断循环的状态。只有成功读取的 4 个单词(safemacebaitmate)会被推入向量中。
  • 我认为我们误解了您想要的内容,需要一个更好的问题描述,包括minimal reproducible example、输入(已经知道了,谢谢)、输入所需的输出(我认为您也提供了),以及你目前得到的输出。

标签: c++ input output whitespace


【解决方案1】:

答案:

问题来自两个流,一个使用!dataStream.eof(),另一个使用dataStream >> pushThis。

已修复,以便两者都使用 dataStream >> pushThis。

供我自己和其他可能发现此内容的人将来参考:

请勿使用eof(),除非您想获取文件的结尾位(包括空格)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
相关资源
最近更新 更多