Преобразование строк: to_string и stoi
Безопасно преобразуйте строки и числовые типы с помощью std::to_string, std::stoi и std::stod.
«Преобразование строк: to_string и stoi» — бесплатный урок C++ Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Почему важно преобразовывать строки
Вам постоянно требуется преобразовывать числа в текст и обратно — для пользовательского ввода, конфигурационных файлов, JSON, URL-адресов и журналов.
std::to_string
std::to_string преобразует любой встроенный числовой тип в строку. Используется форматирование по умолчанию.
#include <string>
std::string a = std::to_string(42); // "42"
std::string b = std::to_string(-7); // "-7"
std::string c = std::to_string(3.14); // "3.140000"Форматирование вещественных чисел по умолчанию
to_string для значения типа double использует шесть знаков после запятой. Для точного управления используйте std::stringstream с std::fixed и std::setprecision или std::format в C++20.
std::stoi: строка в int
Разберите целое число с помощью std::stoi. Функция пропускает начальные пробельные символы и останавливается на первой цифре.
int n = std::stoi("42"); // 42
int m = std::stoi(" -7abc"); // -7 (stops at 'a')Получение позиции окончания разбора
Передайте указатель, чтобы получить индекс, на котором остановился разбор, — это удобно при разборе строк со смешанным содержимым.
std::string s = "42px";
size_t pos;
int n = std::stoi(s, &pos);
std::cout << pos; // 2 (parsed "42", stopped at 'p')Stoi выдаёт исключение при некорректном вводе
Если цифры не найдены, stoi выдаёт исключение std::invalid_argument. Если происходит переполнение числа, выдаётся исключение std::out_of_range.
try {
int x = std::stoi("not_a_number");
} catch (const std::invalid_argument& e) {
std::cout << "Parse failed";
}Преобразование систем счисления
Третий аргумент выбирает основание системы счисления от 2 до 36. Передайте 0, чтобы автоматически определить основание по префиксу.
int hex = std::stoi("ff", nullptr, 16); // 255
int bin = std::stoi("1010", nullptr, 2); // 10
int auto_detect = std::stoi("0xff", nullptr, 0); // 255stol stoll stoul stoull
Варианты для других целочисленных типов:
std::stol— longstd::stoll— long longstd::stoul— unsigned longstd::stoull— unsigned long long
stof stod stold
Варианты с плавающей точкой для типов float, double и long double.
double d = std::stod("3.14159");
float f = std::stof("2.71");C++17 std::from_chars: без исключений
std::from_chars выполняет разбор без выдачи исключений. Он возвращает структуру с ec — кодом ошибки — и ptr — позицией окончания разбора; это предпочтительный вариант для часто выполняемых циклов.
#include <charconv>
std::string s = "42";
int val;
auto result = std::from_chars(s.data(), s.data() + s.size(), val);
if (result.ec == std::errc{}) {
// success
}C++17 std::to_chars: без выделения памяти
Обратная операция для from_chars — запись числа в буфер без выделения памяти. Это самое быстрое доступное преобразование в стандартной библиотеке.
Быстрая проверка
Какое исключение выдаёт std::stoi("abc")?
Итоги
std::to_string преобразует числа в строки, а std::stoi и родственные функции разбирают строки в числа. При ошибке обе группы функций выдают исключения — для быстрого разбора без исключений используйте std::from_chars.
Изучай C++ с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Преобразование строк: to_string и stoi» бесплатный?
Да — полный текст урока «Преобразование строк: to_string и stoi» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Преобразование строк: to_string и stoi»?
Безопасно преобразуйте строки и числовые типы с помощью std::to_string, std::stoi и std::stod. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Преобразование строк: to_string и stoi»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- std::string и массивы символов в стиле C
- Операции со строками: объединение, подстрока, поиск и замена
- Строковый поток stringstream для разбора
- Преобразование строк: to_string и stoi