c++ - stringstream >> 不一致的 '\n' 定界符行为

标签 c++ string parsing stream

我有以下函数来读取文本流并将其分割成给定类型的 vector :

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参数是一段文本,表示 float 或字符串,每个字符串用 ' ' 分隔或 '\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'作为单独的 token 。这就是我想要的!

但是如果给定一个 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'...

编辑2:

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

我的解析器需要文件的 std::vector 拷贝。在将文件读入字符串并将其转换为 vector 的过程中,我使用了 getLine(std::ifstream, std::string) 函数,正如您猜到的那样,它去除了 '\n' 换行符。

最佳答案

您读取的字符串不正确,因此\n 被丢弃。\n 应该会导致 split 。

关于c++ - stringstream >> 不一致的 '\n' 定界符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10217205/

相关文章:

c++ - 如何特征默认构造函数是私有(private)的

c# - 为什么 if 条件不检查空值

C# split 函数不起作用

java - 线程中的异常 "main"java.lang.NumberFormatException :

C++引用类函数错误: identifier is undefined

c++ - 派生类的模板特化

c++ - SSE 版本的不同结果

string - 什么是 Pascal 风格的字符串?

c# - 最快/最安全的文件查找/解析?

java - Java解析定宽文本日志的技巧