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

a から aにstringstreamコピーするためにa を使用するのはなぜですか? あなたはただ行うことができます:stringvector<unsigned char>

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

これにより、コピーが直接実行されます。を使用する必要がある場合は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::copyまたはも検討してください。std::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 に答える