我正在尝试将字符串流中的数据存储到矢量中。我可以成功地这样做但它忽略了字符串中的空格。如何将空格也推入向量?
谢谢!
代码存根:
#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;
}
答案 0 :(得分:14)
为什么您使用stringstream
从string
复制到vector<unsigned char>
?你可以这样做:
vector<unsigned char> vec(line.begin(), line.end());
这将直接复制。如果您需要使用stringstream
,则需要先使用stream >> noskipws
。
答案 1 :(得分:3)
默认情况下,标准流都跳过空格。如果您希望禁用跳过空格,可以使用noskipws操作符在下一个流提取(>>
)操作中明确地执行此操作,如下所示:
stream >> std::noskipws >> var;
答案 2 :(得分:2)
我倾向于建议只使用你真正想要的容器,但你也可以使用操纵器noskipws
有关stringstream和除抽取运算符之外可以使用的其他方法的更多信息,请参阅this
编辑:
为简单起见,请考虑std::copy
或std::basic_string<unsigned char>
。
答案 3 :(得分:1)
你想要noskipws
操纵者。在提取内容之前说出stream >> std::noskipws;
。
[编辑添加std::
前缀,我愚蠢地省略了。您的代码不需要它,因为它顶部有using namespace std;
,但其他人可能选择不这样做。]