C++ Academy · Урок

Преобразование строк: to_string и stoi

Безопасно преобразуйте строки и числовые типы с помощью std::to_string, std::stoi и std::stod.

Урок 4 из 413 шагов

«Преобразование строк: 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); // 255

stol stoll stoul stoull

Варианты для других целочисленных типов:

  • std::stol — long
  • std::stoll — long long
  • std::stoul — unsigned long
  • std::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 — локальная установка не требуется.

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

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