Есть ли способ использовать оператор << с потоком строк и строки с пробелами?

0

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

В основном

std::stringstream stream;
stream << "Test test";
std::string str;
stream >> str;

std::cout << str;

напечатает "Test" вместо "Test test". Есть ли способ избежать этого?

  • 1
    std::cout << stream.rdbuf(); если вы хотите сбросить весь контент в cout .
  • 0
    Вы можете создать оболочку из std::string только для того, чтобы перегрузить operator>> своим поведением. Проблема заключается в следующем: в каком состоянии перестать читать?
Показать ещё 2 комментария
Теги:
string
stringstream

1 ответ

3

Да, используйте std::getline:

std::string str;
std::getline(stream, str);

std::cout << str; // "Test test"
  • 1
    К сожалению, у меня нет целого «Тестового теста» в одной строке. Я думаю, я должен быть более конкретным. Мой код с большей вероятностью будет выглядеть следующим образом: stream << someString1 << «что-то» << someString2 << возможноAnInteger;
  • 0
    Если я правильно прочитал документ, проблема не в << а в операторе >> , std::getline извлекает строку из потока (где все это безопасно хранится). Проверьте en.cppreference.com/w/cpp/string/basic_string/getline ПРИМЕЧАНИЕ. Это сообщение направлено на комментарий ОП, я не пытаюсь изменить ответ 0x4 ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню