c++ 这个使用stringstream的解析函数是如何工作的?

w8f9ii69  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(149)

所以我做了一个函数来解析一个给定的字符串与逗号分隔符在上学期的阴霾。它很可能是我采取了许多指南在线,但它的工作对整个项目,所以我这样做。现在我回去,并审查它,我感到困惑。以下是代码
'向量parsedString(字符串行){向量splitString;

stringstream inputString(line);

    while(inputString.good()){
        string substr;
        getline(inputString,substr,',');
        splitStrings.push_back(substr);
                
        substr = "";
        }

return splitStrings;

}这样做的目的是把行的每一部分都分割成一个向量,然后把向量带回到需要的地方,但是,我不理解字符串流方面的问题。 具体来说,当我编写代码在循环中检查stringstreams内容时,它在整个循环中保持不变,如果getline()应该跟踪最后一个分隔符的位置,为什么它没有显示在内容中? 如果可能的话,解释一下.good()`在这种情况下是如何工作的,我知道stringstream是一个流,这种函数应该检查流是否完成,但我还是不明白程序是如何知道的。
每件事都按计划进行,从我所看到的来看没有任何错误,我只是根本不明白为什么会这样,我不希望我的知识匮乏回来咬我。

iyfjxgzm

iyfjxgzm1#

istringstream不仅仅是string,如果是的话,它将是多余的。
作为第一种近似,您可以将其视为示例包含string * 和 * 位置的类(即字符串索引)。当您从string构造istringstream时,位置被初始化为0。当您从istringstream读取字符时,您获得位置处的字符。位置会递增,所以每次你读一个字符,你就得到下一个字符。(实际上,stringstream具有两个位置,一个用于阅读,一个用于写入,因为它是istringstreamostreamstring的组合,但只有输入部分与您的问题相关。)
所有其他流输入操作都基于阅读单个字符,尽管如果结果相同,则允许实现更高效。
当然,上面的描述过于简单化了,一条流有其他的状态:状态位、格式参数、区域设置以及更多我忘记的东西。请参见this overview for more details。但基本要点是:该串只是X1 M9 N1 X的状态的一部分:状态的其余部分被用来使它看起来像一个I/O流。2如果你想把它顺序地分解成令牌,这是很有用的。

相关问题