c ++ istringstream

时间:2012-07-25 14:15:52

标签: c++ parsing istringstream

我正在尝试编写一个c ++ opengl应用程序来加载.OBJ文件,我使用这段代码来阅读 顶点:

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;
}

基本上,第二代代码解析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));

3 个答案:

答案 0 :(得分:1)

如果你确定前2个字符没用:

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

答案 1 :(得分:1)

它就像从标准输入中读取一样:

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

(注意:tmp只是在行的开头吃'v'并且可以忽略 - 或者在初始化流之前/之后将其删除)

答案 2 :(得分:0)

here。这给了一个很好的例子。用它来调整你的代码