cin在一行上未定义的坐标数量

时间:2012-08-04 19:28:25

标签: c++

我正在尝试在一条线上切割未定义数量的坐标(x,y,重量)。例:

Please enter all the coords:

(1,2,5) (1,5,7) (2,5,2) (2,4,4) (2,3,5) (3,4,1) (4,5,9)

我将它们存放在一个二维数组中,所以对于我的第一个坐标,它将是:

array[1][2] = 5

如果每行只有一个coord,我会做类似的事情:

cin >> trash_char >> x >> y >> weight >> trash_char;
array[x][y] = weight

如何在一条线上为不确定数量的坐标做到这一点?

谢谢你们!

2 个答案:

答案 0 :(得分:1)

定义结构。

struct Coord3D{
     float x,y,z;
};

定义插入运算符

template<typename ReadFunc>
istream& operator >> (istream& stream, Coord3D& coord){
     return ReaderFunc(stream, coord );
}

定义读者功能。

istream& MyCoordReader(istream& stream, Coord3D& coord){
     char trash_char = 0;
     return stream >> trash_char >> x >> y >> weight >> trash_char;
}

像这样使用

 //template instantiation, probably wrong syntax
template<MyCoordReader> istream& opeartor >> (istream&,Coord3D&);

int main(){
   std::vector<Coord3D> coordinates;
   Coord3D coord;
   while( cin >> coord ){ coordinates.push_back(coord); }
   return 0;
}

答案 1 :(得分:0)

喜欢这个

#include <sstream>
#include <iostream>
#include <string>

string line;
getline(cin, line);
istringstream buffer(line);
while (buffer >> trash_char >> x >> y >> weight >> trash_char)
{
  // do something
}

使用getline将一行读入字符串。然后将该字符串包装在istringstream中,以便您可以从中读取coords。