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'

现在我的问题是,当给定 a 时std::vector<float> type_vector,该parse_string函数将由' 'or'\n'分隔符分隔。例如:

0.01 0.02 0.03 0.04
0.05 0.06 0.07 0.08

它将读取'0.04''0.05'作为单独的标记。这就是我要的!

但是,如果给定 a std::vector<std::string> type_vectorparse_string则只会分开 by ' '。因此,如果我的文字如下:

root_joint left_hip left_knee left_ankle
left_foot right_hip right_knee right_ankle

它将读取“left_ankleleft_foot”作为单个标记。似乎没有考虑到and'\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' ...

编辑2:

好吧,我知道我做错了什么。正如你们中的许多人所指出的,它与 stringstream 无关。

我的解析器需要文件的 std::vector 副本。在将文件读入字符串并将其转换为向量的过程中,我使用了 getLine(std::ifstream, std::string) 函数,您可以猜到,它会去除 '\n' 换行符。

4

1 回答 1

1

您正在错误地读取字符串,因此 \n 被丢弃。\n 应该导致分裂。

于 2012-04-18T20:40:41.153 回答