c ++: поток строк в вектор - PullRequest
9 голосов
/ 08 марта 2011

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

Спасибо!

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

#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 ]

14 голосов
/ 08 марта 2011

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

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

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

3 голосов
/ 08 марта 2011

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

stream >> std::noskipws >> var;
2 голосов
/ 08 марта 2011

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

См. this для получения дополнительной информации о stringstream и других методахможет использовать помимо оператора извлечения

Редактировать:

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

1 голос
/ 08 марта 2011

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

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

...