2012-07-25 81 views
0

我試圖寫一個C++ OpenGL應用程序加載.obj文件,我使用該代碼來讀取 頂點:C++ istringstream

char buf[256]; 
while(!objFile.eof()) 
{ 
    objFile.getline(buf,256); 
    coordinates.push_back(new std::string(buf)); 
} 

else if ((*coordinates[i])[0]=='v' && (*coordinates[i])[1]==' ') 
{ 
    float tmpx,tmpy,tmpz; 
    sscanf(coord[i]->c_str(),"v %f %f %f",&tmpx,&tmpy,&tmpz); 
    vertex.push_back(new coordinate(tmpx,tmpy,tmpz)); 
    cout << "v " << tmpx << " " << tmpy << " " << tmpz << endl; 
} 

所以basicly代碼的第二PICE解析來自頂點線OBJ文件

v 1.457272 0.282729 -0.929271 

我的問題是如何可以解析使用istringstream 什麼將下面的代碼轉換到C該頂線C++風格++語法

sscanf(coord[i]->c_str(),"v %f %f %f",&tmpx,&tmpy,&tmpz); 
    vertex.push_back(new coordinate(tmpx,tmpy,tmpz)); 
+0

'coord'沒有在附加的代碼sn中聲明ippet。 – timrau 2012-07-25 14:30:07

回答

1

如果您是確保前兩個字符是無用的:

istringstream strm(*coord[i]); 
strm.ignore(2); 
strm >> tmpx >> tmpy >> tmpz; 
vertex.push_back(new coordinate(tmpx, tmpy, tmpz)); 
0

請參閱here。這是一個很好的例子。用它來適應你的代碼

+0

jcatki.no-ip.org/fncpp/cplusplus.com – 2012-07-27 14:28:11

1

它的工作原理就像從標準輸入讀取:

istringstream parser(coord[i]); 
char tmp; 
parser >> tmp >> tmpx >> tmpy >> tmpz; 

(注: tmp只是在那裏吃了在行開頭的'v',可以忽略 - 或者在初始化流之前或之後將其切掉)