3

テキストのストリームを読み取り、それを特定のタイプのベクトルに切り刻む次の関数があります。

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' 改行文字を取り除きます。

4

1 に答える 1

1

\n が破棄されるように、文字列を正しく読み取っていません。\n 分割につながるはずです。

于 2012-04-18T20:40:41.153 に答える