テキストのストリームを読み取り、それを特定のタイプのベクトルに切り刻む次の関数があります。
template<class Type>
void parse_string(std::vector<Type> &type_vector, char *string)
{
std::stringstream stream(string);
while (stream.good())
{
Type t;
stream >> t;
type_vector.push_back(t);
}
}
char *string
パラメータは、浮動小数点数または文字列を表すテキストのチャンクで、それぞれが または で区切られてい' '
ます'\n'
。
今私の問題は、 を指定するstd::vector<float> type_vector
と、parse_string
関数が' '
または'\n'
区切り記号の両方で区切られることです。例:
0.01 0.02 0.03 0.04
0.05 0.06 0.07 0.08
'0.04'
と'0.05'
を別々のトークンとして読み取ります。これは私が欲しいものです!
ただし、 が与えられたstd::vector<std::string> type_vector
場合、parse_string
は だけで区切られ' '
ます。したがって、私のテキストが次のようになっている場合:
root_joint left_hip left_knee left_ankle
left_foot right_hip right_knee right_ankle
「left_ankleleft_foot」を単一のトークンとして読み取ります。'\n'
と の間'left_ankle'
にあることを考慮していないようです'left_foot'
。
これは何が原因ですか?
編集:
デバッガーに表示される正確な char* 引数は次のとおりです。
0.01 0.02 0.03 0.040.05 0.06 0.07 0.08
root_joint left_hip left_knee left_ankleleft_foot right_hip right_knee right_ankle
そのため、ファイルの '\n' を完全に無視しているようです...
EDIT2:
さて、私は自分が間違っていたことを理解しました。多くの方が指摘しているように、stringstream とは何の関係もありません。
私のパーサーには、ファイルの std::vector コピーが必要でした。ファイルを文字列に読み取ってベクトルに変換する過程で、getLine(std::ifstream, std::string) 関数を使用しました。これは、ご想像のとおり、'\n' 改行文字を取り除きます。