我有一个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。
你将如何实现这一结果?我想那个条件
非常感谢您的帮助!
答案 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
}
这对我来说非常适合。