Как конвертировать int в string в C++: полный гид с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

«Int to string» в C++: почему этот вопрос мучает даже опытных?

Представьте ситуацию: вы пишете программу на C++, которая должна вывести на экран число, а затем добавить к нему текст — например, «Результат: 42». Или вам нужно сохранить ID пользователя (int) в JSON-файл как строку. Казалось бы, что может быть проще? Но вот незадача — в C++ нельзя просто написать string s = 42;. Компилятор выдаст ошибку.

Вопрос «How can I convert int to string in C++?» — один из самых популярных на Stack Overflow (сотни тысяч просмотров). И это не случайно. В отличие от Python или JavaScript, где всё «само магически конвертируется», C++ требует явного преобразования типов. Но не волнуйтесь! В этой статье мы разберём 5 проверенных способов, от классики до современного C++20. Вы узнаете, какой метод быстрее, какой удобнее, и когда каждый из них использовать.

Поехали!

Способ №1: std::to_string — современный и простой (C++11 и новее)

Начиная с C++11, в стандартной библиотеке появилась функция std::to_string. Это самый простой и читаемый способ конвертации int в string в C++.

#include <iostream>
#include <string>

int main() {
    int number = 2024;
    std::string str = std::to_string(number);
    std::cout << "Строка: " << str << std::endl;  // Вывод: Строка: 2024
    return 0;
}

Плюсы:

  • Коротко и понятно — одна строка кода
  • Поддерживает int, long, float, double и другие числовые типы
  • Не нужно подключать дополнительные библиотеки (кроме <string>)

Минусы:

  • Нет контроля над форматированием (количество знаков, ведущие нули)
  • Медленнее, чем низкоуровневые методы, если вызывать миллионы раз

Когда использовать: В 90% случаев. Для обычных задач, где не нужен специфический формат вывода, std::to_string — идеальный выбор.

Способ №2: std::stringstream — гибкий, как швейцарский нож

Если вам нужно не просто конвертировать число, но и отформатировать его (добавить пробелы, изменить основание системы счисления), на помощь приходит std::stringstream. Это класс из библиотеки <sstream>, который работает как «умная строка».

#include <iostream>
#include <sstream>
#include <string>

int main() {
    int number = 255;
    std::stringstream ss;
    ss << "Значение: " << number << " (шестнадцатеричное: " << std::hex << number << ")";
    std::string result = ss.str();
    std::cout << result << std::endl;
    // Вывод: Значение: 255 (шестнадцатеричное: ff)
    return 0;
}

Плюсы:

  • Полный контроль над форматированием (std::hex, std::oct, std::setw, std::setprecision)
  • Можно «на лету» конкатенировать строки и числа

Минусы:

  • Медленнее std::to_string из-за создания объекта stringstream
  • Требуется больше кода для простой конвертации

Когда использовать: Когда нужно сложное форматирование или преобразование в разные системы счисления.

Способ №3: sprintf и snprintf — дедовский метод из C

Старый, но надёжный способ, пришедший из языка C. Функция sprintf записывает отформатированную строку в массив char. В C++ её тоже можно использовать, но нужно быть осторожным с переполнением буфера.

#include <iostream>
#include <cstdio>  // для sprintf
#include <cstring> // для strlen

int main() {
    int number = 42;
    char buffer[50];
    sprintf(buffer, "%d", number);
    std::string str(buffer);
    std::cout << "Результат: " << str << std::endl;
    return 0;
}

Важно: В современном C++ рекомендуется использовать snprintf вместо sprintf — он принимает размер буфера и предотвращает переполнение.

snprintf(buffer, sizeof(buffer), "%d", number);

Плюсы:

  • Очень быстрый (низкоуровневый)
  • Гибкое форматирование (как в printf)

Минусы:

  • Ручное управление памятью — легко ошибиться с размером буфера
  • Не C++-стиль (работаем с сырыми указателями)

Когда использовать: В высокопроизводительном коде, где каждая миллисекунда на счету, и вы уверены в размере числа. В остальных случаях лучше выбрать std::to_string.

Способ №4: Boost.LexicalCast — мощь библиотеки Boost

Если вы уже используете Boost в своём проекте, то boost::lexical_cast может стать элегантным решением. Эта функция умеет конвертировать не только int в string, но и наоборот, а также между любыми типами, поддерживающими потоковый ввод/вывод.

#include <iostream>
#include <boost/lexical_cast.hpp>
#include <string>

int main() {
    int number = 12345;
    try {
        std::string str = boost::lexical_cast<std::string>(number);
        std::cout << "Число как строка: " << str << std::endl;
    } catch (boost::bad_lexical_cast &e) {
        std::cerr << "Ошибка: " << e.what() << std::endl;
    }
    return 0;
}

Плюсы:

  • Единый интерфейс для всех типов
  • Генерирует исключения при ошибках (безопаснее)

Минусы:

  • Требуется установка и подключение Boost
  • Медленнее, чем std::to_string (из-за потоков внутри)

Способ №5: std::format — будущее уже здесь (C++20)

C++20 принёс долгожданную функцию std::format, вдохновлённую Python-стилем форматирования. Это самый современный и безопасный способ преобразования int в string.

#include <iostream>
#include <format>  // C++20
#include <string>

int main() {
    int number                

Блоги

Рекомендаций по книгам