试图用sstream替换scanf

时间:2016-08-10 13:01:11

标签: c++

我正在尝试解析文件。我目前正在使用以下代码,但希望将其替换为基于sstream的解决方案

unsigned int vertexIndex[3], uvIndex[3], normalIndex[3];
const char* cstring = line.c_str();
int matches = sscanf(cstring, "f %d/%d/%d %d/%d/%d %d/%d/%d\n", &vertexIndex[0], &uvIndex[0], &normalIndex[0], &vertexIndex[1], &uvIndex[1], &normalIndex[1], &vertexIndex[2], &uvIndex[2], &normalIndex[2]);

当我尝试以下操作时,我会得到意想不到的结果

std::stringstream f(line);
f >> vertexIndex[0] >> uvIndex[0] >> normalIndex[0] >> vertexIndex[1] >> uvIndex[1] >> normalIndex[1] >> vertexIndex[2] >> uvIndex[2] >> normalIndex[2];

我确信我误解了流的使用方式......任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

这是一种简单的缺乏理解。我特定问题的解决方案是:

std::stringstream ss(line.substr(2)); 
char throwaway; 
for (int i = 0; i < 3; i++){ 
     ss >> vertexIndex[i] >> throwaway >> uvIndex[i] >> throwaway >> normalIndex[i]; 
}

我的下一个问题是为什么以下不起作用?

ss.ignore(std::numeric_limits<std::streamsize>::max(), '/');
ss >> vertexIndex[i] >>  uvIndex[i] >>  normalIndex[i];