我正在尝试解析文件。我目前正在使用以下代码,但希望将其替换为基于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];
我确信我误解了流的使用方式......任何帮助都会很棒!
答案 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];