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

时间:2010-07-16 08:57:51

标签: c++ iostream

我有一个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

其中......某些东西......在我读完2.0之后评估为false并且该点的istream应该是3.0以便下一个

istream >> x;

应将x设置为3.0。

你将如何实现这一结果?我想那个条件

非常感谢您的帮助!

6 个答案:

答案 0 :(得分:12)

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

while ((istream.peek()!='\n') && (istream>>x))

答案 1 :(得分:7)

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

答案 2 :(得分:2)

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;

答案 3 :(得分:1)

您可以使用std::istream::peek()检查下一个字符是否为换行符。 请参阅cplusplus.com参考中的this entry

答案 4 :(得分:0)

读取数字,然后读取一个字符以查看它是否为换行符。

答案 5 :(得分:0)

我有类似的问题 输入如下:

1 2
3 4 5

前两个是N1和N2 然后有一个换行符
那么元素3 4 5,我不知道会有多少。

// read N1 & N2 using cin
int N1, N2;
cin >> N1;
cin >> N2;

// skip the new line which is after N2 (i.e; 2 value in 1st line)
cin.ignore(numeric_limits<streamsize>::max(), '\n');

// now read 3 4 5 elements
int ele;
// 2nd EOF condition may required,
//    depending on if you dont have last new-line, and it is end of file.
while ((cin_.peek() != '\n') && (cin_.peek() != EOF)) {
  cin >> ele;
  // do something with ele
}

这对我来说非常适合。