0

未定義の数の座標 (x、y、重み) を 1 行で cin しようとしています。例:

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)

それらを 2 次元配列でストックするので、最初の座標では次のようになります。

array[1][2] = 5

1 行に 1 つの座標しかない場合は、次のようにします。

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

1行で未定の量の座標に対してそれを行うにはどうすればよいですか?

みんなありがとう!

4

2 に答える 2

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;
}
于 2012-08-04T19:55:20.780 に答える
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を使用して、1行を文字列に読み込みます。次に、その文字列をistringstreamでラップして、そこから座標を読み取れるようにします。

于 2012-08-04T19:35:23.727 に答える