2012-04-30 79 views
0

我有std::vector<std::string> WorldData。它包含了我的文件的每一行稱爲world.txt(有OpenGL三維配位),它看起來像:從文件到文本的文本

-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. 

我怎麼可能把這些字符串浮動的變量? 當我嘗試:

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

你真的使用s CANF?如果您從字符串讀取,您應該使用sscanf。 – happydave

+0

omg我還沒有看到,我想是時候睡覺了:P非常感謝 – fex

回答

3

使用sstream

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

這應該是'std :: istringstream iss; iss.rdbuf() - > pubsetbuf(WorldData [i] .c_str(),WorldData [i] .size());'如果您想避免'WorldData [i]'內部數據不必要的重複。 – 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>());