c++: stringstream в вектор

Я пытаюсь сохранить данные, которые находятся в stringstream в вектор. Я могу успешно сделать это, но он игнорирует пробелы в строке. Как сделать так, чтобы пространства также были вытеснены в вектор?

спасибо!

заглушка код:

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

using namespace std;

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

    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 ответов


почему вы используете stringstream скопировать из string на vector<unsigned char>? Вы можете просто сделать:

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

и это сделает копию напрямую. Если вам нужно использовать stringstream, вы должны использовать stream >> noskipws первый.


по умолчанию стандартные потоки пропускают пробелы. Если вы хотите отключить пропуск пробела, вы можете явно сделать это при следующем извлечении потока (>>) операция с помощью манипулятора noskipws, как так:

stream >> std::noskipws >> var;

Я склонен предложить просто использовать контейнер, который вы действительно хотите, но вы также можете использовать манипулятор noskipws

посмотреть этой подробнее о stringstream и другие методы можно использовать, кроме оператора добычи

Edit:

также считают std::copy или std::basic_string<unsigned char> для простоты.


вы хотите noskipws манипулятор. Скажи stream >> std::noskipws; прежде чем вытаскивать вещи из него.

[отредактировано для добавления std:: префикс, который я тупо опущены. Ваш код не нуждается в нем, потому что он имеет using namespace std; вверху, но другие могут выбрать не делать этого.]