【问题标题】:Read a file .txt C++读取文件 .txt C++
【发布时间】:2017-02-18 09:42:59
【问题描述】:

我应该如何从file.txt 中读取带有spaces 的行并将其记录在我的vector 中? 我有一行包含许多单词,但我的循环没有看到它并一一阅读并以这种方式打印:

例如,我在一个文件中有一个字符串:

Hello, my friends,how are you?

Hello,James, we are fine.

在我的控制台中,我看到了:

Hello,
my
friends
....
fine

这是我的循环:

while(rRecord»str)
{
    lines.push_back(str);
}

还有打印我的话的函数:

void printRecord(int& numStr,struct winsize w,std::vector<std::string>& lines)
{

for (int i = numStr; i < numStr + w.winsize::ws_row-1; i++)
{

   if (i>=lines.size())
   break;
   else
   std::cout « lines[i] « std::endl;

}

    numStr += w.winsize::ws_row;
}

【问题讨论】:

  • std::getline()怎么样?

标签: c++ compare symbols


【解决方案1】:

要逐行阅读,请使用std::getline,如下所示:

std::string line;
while (std::getline(inFile, line)) {
    lineVector.push_back(std::move(line));
}

std::move 表示当vector 创建新元素时,它可以从line“窃取”内部缓冲区,这意味着line 现在将是一个空字符串,但节省了额外的分配+复制.


请注意,将getline&gt;&gt; 混合通常不是一个好主意,因为&gt;&gt; 会在流中留下任何尾随空格,包括换行符,这意味着您下次尝试时会得到意想不到的结果getline.

【讨论】:

  • 感谢解答,尝试使用
  • std::move 调用看起来很像过早优化。
猜你喜欢
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
相关资源
最近更新 更多