我有以下函数来读取文本流并将其分割成给定类型的向量:
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_vector
,parse_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' 换行符。