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++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x