12

我正在尝试将字符串流中的数据存储到向量中。我可以成功这样做,但它忽略了字符串中的空格。我怎样才能使空格也被推入向量中?

谢谢!

代码存根:

#include <iostream>
#include <sstream>
#include <vector>

using namespace std;

int main()
{
    stringstream s;
    string line  = "HELLO HELLO\0";

    stringstream stream(line);

    unsigned char temp;
    vector<unsigned char> vec;
    while(stream >> temp) 
        vec.push_back(temp);


    for (int i = 0; i < vec.size(); i++)
         cout << vec[i];
    cout << endl;
    return 0;
}
4

4 回答 4

17

为什么要使用 astringstream从 a 复制string到 a vector<unsigned char>?你可以这样做:

vector<unsigned char> vec(line.begin(), line.end());

这将直接进行复制。如果需要使用 a stringstream,则需要先使用stream >> noskipws

于 2011-03-07T23:18:19.660 回答
4

默认情况下,标准流都跳过空格。如果您希望禁用跳过空白,您可以>>使用 noskipws 操纵器在下一个流提取 ( ) 操作中明确执行此操作,如下所示:

stream >> std::noskipws >> var;
于 2011-03-07T23:15:49.860 回答
2

我倾向于建议只使用你真正想要的容器,但你也可以使用操纵器noskipws

有关stringstream 和除提取运算符之外您可以使用的其他方法的更多信息,请参阅此内容

编辑:

也考虑std::copystd::basic_string<unsigned char>为简单起见。

于 2011-03-07T23:14:37.933 回答
1

你想要noskipws机械手。stream >> std::noskipws;在把东西拿出来之前说。

[编辑添加std::前缀,我愚蠢地省略了。您的代码不需要它,因为它using namespace std;位于顶部,但其他人可能会选择不这样做。]

于 2011-03-07T23:18:11.330 回答