0Pricing
C++ Academy · Урок

Строковый поток stringstream для разбора

Используйте std::stringstream для разбиения текста на токены и разбора в значения нужных типов.

«Строковый поток stringstream для разбора» — бесплатный урок C++ Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Что такое stringstream?

std::stringstream оборачивает строку в интерфейс потоков ввода-вывода. Читайте из него и записывайте в него с помощью >> и <<, как если бы это были cin или cout.

#include <sstream>
std::stringstream ss;

Создание строк с помощью stringstream

Используйте его для создания сложных строк из значений разных типов. Вызовите .str(), чтобы получить результат.

std::stringstream out;
out << "User: " << name << ", Age: " << age;
std::string result = out.str();

Разбор с помощью stringstream

Инициализируйте его строкой и извлекайте значения с помощью >>. Он разбивает строку на токены по пробельным символам.

std::stringstream in("42 3.14 hello");
int i; double d; std::string s;
in >> i >> d >> s;

Чтение строки в токены

Сочетайте getline со stringstream, чтобы разбивать по одному целую строку.

std::string line = "1 2 3 4 5";
std::stringstream ss(line);
int n;
while (ss >> n) {
    std::cout << n * n << " ";
}
// 1 4 9 16 25

Разделение по разделителю

Передайте разделитель в getline для stringstream, чтобы разделить строку по запятым, точкам с запятой или любому другому символу.

std::string csv = "apple,banana,cherry";
std::stringstream ss(csv);
std::string fruit;
while (std::getline(ss, fruit, ',')) {
    std::cout << fruit << "\n";
}

istringstream и ostringstream

Существуют три варианта:

  • std::istringstream — только чтение
  • std::ostringstream — только запись
  • std::stringstream — чтение и запись

Для ясности используйте наиболее специализированный вариант.

Проверка ошибок разбора

Если извлечение не удаётся, например из-за неправильного типа, поток устанавливает бит ошибки. После извлечения проверьте !ss или ss.fail().

std::stringstream ss("not_a_number");
int x;
if (!(ss >> x)) {
    std::cout << "Parse failed";
}

Сброс состояния stringstream

Чтобы повторно использовать stringstream, очистите его состояние и содержимое.

std::stringstream ss;
ss << "first";
ss.str("");        // clear contents
ss.clear();        // clear flags
ss << "second";

Число в строку

Для простых преобразований std::to_string короче, чем stringstream.

std::string s = std::to_string(42);   // "42"
std::string p = std::to_string(3.14); // "3.140000"

Строка в число без потоков

std::stoi, std::stod и std::stoll разбирают числа из строк и выдают исключение при некорректном вводе.

int n = std::stoi("42");
double d = std::stod("3.14");
// std::stoi("xyz") throws std::invalid_argument

C++17 std::from_chars

Для максимальной скорости std::from_chars из <charconv> разбирает данные без исключений и выделения памяти. Идеально подходит для часто выполняемых участков кода.

Быстрая проверка

Какой заголовочный файл необходимо подключить, чтобы использовать std::stringstream?

Итоги

std::stringstream превращает строки в потоки для удобного разбора и форматирования. Сочетайте его с std::getline для разделения по разделителям. В простых случаях предпочитайте std::to_string и std::stoi.

Часто задаваемые вопросы

Урок «Строковый поток stringstream для разбора» бесплатный?

Да — полный текст урока «Строковый поток stringstream для разбора» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «Строковый поток stringstream для разбора»?

Используйте std::stringstream для разбиения текста на токены и разбора в значения нужных типов. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Строковый поток stringstream для разбора»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. std::string и массивы символов в стиле C
  2. Операции со строками: объединение, подстрока, поиск и замена
  3. Строковый поток stringstream для разбора
  4. Преобразование строк: to_string и stoi
← Назад к C++ Academy