2016-08-10 5 views
0

ファイルを解析しようとしています。私は現在、次のコードを使用していますが、sstream提供ベースのソリューションscanfを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

"f"とスラッシュはどこにありますか?私はあなたがそれを行うためのコードを書いたことを知りません。 –

+1

(C++でもかなり正直なところですが、ほとんどの場合、オリジナルのソリューションがおそらく好ましいでしょう) –

+0

[cinで特定のフォーマットで読む]の可能な複製(http://stackoverflow.com/questions/14901678/reading-特定の形式のcinでの) –

答えて

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]; 
関連する問題