【发布时间】:2020-07-11 23:57:08
【问题描述】:
请注意,我在今天之前从未使用过流,所以我对它们的理解仍然相当模糊。当我说了一些令人震惊的愚蠢的话时道歉。
这里我有一小段代码可以在每个空间将一个字符串流拆分成一堆字符串。
vector<string> words;
stringstream ss("some random words that I wrote just now");
string word;
while(getline(ss, word, ' ')){
words.push_back(word);
}
我想知道为什么我们在这里使用stringstream,而不仅仅是string。
这将像这样工作:
- 在内存位置 x 创建一个字符串对象
- 引用时,遍历每个字符并检查它是否为空格。之前的所有字符都应该临时保存在某个地方。
- 如果是空格,则抓取我们刚刚存储的所有内容并将其粘贴到向量的末尾,然后清除临时存储内容。如果不是空格,请返回第 2 步
将"some random words that I wrote just now" 存储为stringstream 将如何帮助我们?
它只是制作一个字符流以便我们可以检查它们吗?这是必要的吗?我们是否总是这样做,即使是其他语言?
【问题讨论】:
-
我不确定我是否理解这个问题。您正在使用字符串流,因为这就是您选择进行字符串拆分的方式。您可以使用其他方法进行字符串拆分,但这是您选择的方法。
-
我不确定我是否理解所有的反对意见。问题很明确;答案是正确的。
-
@OP -- 使用
std::stringstream的代码可以正常工作。你的2)和3)——有用吗?它有错误吗?是否存在未实现的极端案例?这就是使用std::stringstream的原因——您编写的代码越少,发生错误的机会就越少。在现实生活中的 C++ 代码审查中,如果代码的目的是获取由空格分隔的每个字符串,并且您显示一个不使用stringstream而是使用 1)、2) 和 3 的字符串),如果代码被拒绝,无论它是否有效(或无效),都不要感到震惊。