首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从istream读取C++,直到换行符(但不是空格)

从istream读取C++,直到换行符(但不是空格)
EN

Stack Overflow用户
提问于 2010-07-16 16:57:51
回答 6查看 43.6K关注 0票数 19

我有一个std::istream,它引用矩阵数据,类似于:

0.0 1.0 2.0
3.0 4.0 5.0

现在,为了评估列数,我想编写一些代码,如下所示:

std::vector<double> vec;
double x;
while( (...something...) && (istream >> x) )
{
    vec.push_back(x); 
}
//Here vec should contain 0.0, 1.0 and 2.0

...something在哪里..。在我读取2.0之后,part的计算结果为false,而此时的istream应该为3.0,因此下一个

istream >> x;

应将x设置为3.0。

您将如何实现这一结果?我猜while条件

非常感谢您的帮助!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-16 17:20:23

使用peek方法检查下一个字符:

while ((istream.peek()!='\n') && (istream>>x))
票数 14
EN

Stack Overflow用户

发布于 2010-07-16 17:04:14

使用std::getline()将行读入std::string,然后将该字符串分配给std::istringstream对象,并从中提取数据,而不是直接从istream中提取数据。

票数 12
EN

Stack Overflow用户

发布于 2010-07-16 17:20:56

std::vector<double> vec;
{
   std::string line;
   std::getline( ifile, line );
   std::istringstream is(line);
   std::copy( std::istream_iterator<double>(is), std::istream_iterator<double>(),
              std::back_inserter(vec) );
}
std::cout << "Input has " << vec.size() << " columns." << std::endl;
std::cout << "Read values are: ";
std::copy( vec.begin(), vec.end(), 
           std::ostream_iterator<double>( std::cout, " " ) );
std::cout << std::endl;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3263323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档