字符串流>>不一致的'n'分隔符行为
stringstream >> inconsistent ' ' delimiter behaviour
我有以下函数来读取文本流并将其切成给定类型的向量:
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"作为单个令牌。似乎没有考虑到'left_ankle'
和'left_foot'
之间存在'n'
。
是什么原因造成的?
编辑:
调试器中显示的确切 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
所以它似乎完全忽略了文件中的""......
编辑2:
好吧,我发现我做错了什么。正如你们许多人指出的那样,它与字符串流无关。
我的解析器需要文件的 std::vector 副本。在将文件读取为字符串并将其转换为向量的过程中,我使用了getLine(std::ifstream,std::string)函数,正如您可以猜到的那样,该函数去除了""换行符。
您错误地读取了字符串,因此 被丢弃。 应该会导致拆分。
相关文章:
- 当用户键入分隔符时,停止getline()输入
- EASTL矢量<向量<int>>连续的
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 带有多个字符分隔符的正则表达式
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 字符串开头的分隔符
- 尝试将 c 字符串数组与分隔符连接起来
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 根据新的行分隔符从字符串中删除子字符串
- 同一分隔符之间的多个子字符串
- 通过分隔符分隔包含 UTF-16 BE 文本的uint8_t数组
- 字符串流分隔符
- 如何在 std::getline 中自定义分隔符
- getline() 上的分隔符无法正常工作
- 示例代码中使用分隔符将 std::string 拆分为 std::vector 的范围问题
- C++使用分隔符读取文件
- 使用连续分隔符和空最后一个字符进行拆分
- 到达分隔符时跳到文本文件的下一行
- 使用空格分隔符从文本文件将对象读入数组