Строковый поток 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_argumentC++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 — локальная установка не требуется.
Все уроки этого курса
- std::string и массивы символов в стиле C
- Операции со строками: объединение, подстрока, поиск и замена
- Строковый поток stringstream для разбора
- Преобразование строк: to_string и stoi