C++
Конвертирование в C++: строки, числа и static_cast
Конвертирование в C++ зависит от того, что во что нужно превратить. Строку в число обычно переводят через std::stoi или std::stod, число в строку — через std::to_string, а один числовой тип в другой — через static_cast. Главное — не путать явное преобразование с простым присваиванием
Строка в int
#include <iostream>
#include <string>
int main() {
std::string text = "42";
int number = std::stoi(text);
std::cout << number + 8 << '\n';
}
Вывод:
50
Пока "42" было строкой, это был текст. После stoi это число, с которым можно считать
Строка в double
std::string priceText = "19.95";
double price = std::stod(priceText);
stod полезен для дробных чисел. Но учитывайте формат десятичной точки: в C++ часто ожидается точка, а не запятая
Число в строку
int score = 100;
std::string message = "Score: " + std::to_string(score);
std::cout << message << '\n';
to_string удобен для сообщений, логов, имени файла, вывода результата
static_cast для числовых типов
Если нужно явно преобразовать int в double:
int a = 5;
int b = 2;
double result = static_cast<double>(a) / b;
std::cout << result << '\n';
Вывод:
2.5
Без static_cast выражение a / b выполнит целочисленное деление и даст 2
Ошибки при stoi
Если строка не является числом, stoi бросит исключение:
try {
int value = std::stoi("abc");
std::cout << value << '\n';
} catch (const std::exception& error) {
std::cout << "Cannot convert\n";
}
Для пользовательского ввода это важно. Пользователь может ввести пустую строку, буквы или число в неправильном формате
Что не стоит делать
Не пытайтесь просто присвоить строку числу:
std::string text = "123";
// int number = text; // ошибка
Компилятор не обязан угадывать, как именно преобразовать текст. Используйте явную функцию
Преобразование char и int
Иногда нужно получить цифру из символа:
char digit = '7';
int value = digit - '0';
Такой прием работает для символов '0' — '9'. Но перед этим лучше проверить:
if (digit >= '0' && digit <= '9') {
int value = digit - '0';
std::cout << value << '\n';
}
Не путайте символ '7' и число 7. У символа есть код, поэтому простое приведение через static_cast<int>(digit) даст код символа, а не математическое значение цифры
Когда использовать stringstream
Для сложного разбора строки можно использовать std::stringstream:
#include <sstream>
std::stringstream ss("10 20");
int a;
int b;
ss >> a >> b;
Это удобно, когда в одной строке несколько значений. Для одного числа чаще проще stoi или stod
Если программа читает данные из файла, stringstream часто удобнее ручного разрезания строки: он последовательно вытаскивает значения нужных типов
Частые ошибки
Первая ошибка — складывать строку "10" и число 5, ожидая 15. Вторая — забывать #include <string>. Третья — использовать C-style cast без необходимости. Четвертая — не обрабатывать ошибку преобразования пользовательского ввода. Пятая — терять дробную часть при преобразовании double в int
Мини-задача: спросите у пользователя возраст строкой, преобразуйте через stoi, прибавьте 1 и выведите возраст в следующем году. Добавьте try/catch для неправильного ввода
Что почитать дальше по C++
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Enter в C++: перенос строки, std::endl и ввод через cin
- length в C++: длина строки, vector, массива и C-строки
- Как обнулить static переменную в C++: локальная static, поле класса и reset-функция
- Как отделить буквы от цифр в C++: isalpha, isdigit и две строки