2012-04-30 10 views
0

私はstd::vector<std::string> WorldDataです。私は、変数をfloat型にこれらの文字列を変換することができる方法ファイルからフロートへのテキスト

-3.0 0.0 -3.0 0.0 6.0 
-3.0 0.0 3.0 0.0 0.0 
3.0 0.0 3.0 6.0 0.0 etc. 

:それは、それがどのように見える(OpenGLの3D配位がある)world.txtと呼ばれる私のファイルのすべての行が含まれていますか?私が試したとき は:

scanf(WorldData[i].c_str(), "%f %f %f %f %f", &x, &y, &z, &tX, &tY); 
or 
scanf(WorldData[i].c_str(), "%f %f %f %f %f\n", &x, &y, &z, &tX, &tY); 

変数x、y、zを、TX、TYは、いくつかの奇妙な数字を取得します。

+4

実際には缶?文字列から読み込む場合は、sscanfを使用する必要があります。 – happydave

+0

私はそれを見たことがない、私はそれが眠る時だと思う:Pありがとうたくさん – fex

答えて

3

sstreamを使用:

std::istringstream iss(WorldData[i]); 
iss >> x >> y >> z >> tX >> tY; 
+0

それは 'std :: istringstream iss; 'WorldData [i]'の中で不要なデータの重複を避けたい場合は、iss.rdbuf() - > pubsetbuf(WorldData [i] .c_str()、WorldData [i] .size()); – ildjarn

9

むしろよりベクター中にファイルから読み取られ、次に座標にベクトルから、私は、ファイルから直接座標読んだ:

struct coord { 
    double x, y, z, tX, tY; 
}; 

std::istream &operator>>(std::istream &is, coord &c) { 
    return is >> c.x >> c.y >> c.z >> c.tX >> c.tY; 
} 

istream_iteratorを使用して座標ベクトルを作成することができます。

std::ifstream in("world.txt"); 

// initialize vector of coords from file: 
std::vector<coord> coords((std::istream_iterator<coord>(in)), 
          std::istream_iterator<coord>()); 
関連する問題