Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Преобразование строки в число
Для преобразования строки в число используются следующие функции:
#include <string>
int stoi(const string &str, size_t *idx=0, int radix=10);
int stoi(const wstring &str, size_t *idx=0, int radix=10);
long stol(const string &str, size_t *idx=0, int radix=10);
long stol(const wstring &str, size_t *idx=0, int radix=10);
unsigned long stoul(const string &str, size_t *idx=0, int radix=10);
unsigned long stoul(const wstring &str, size_t *idx=0, int radix=10);
long long stoll(const string &str, size_t *idx=0, int radix=10);
long long stoll(const wstring &str, size_t *idx=0, int radix=10);
unsigned long long stoull(const string &str, size_t *idx=0,
int radix=10);
unsigned long long stoull(const wstring &str, size_t *idx=0,
int radix=10);
float stof(const string &str, size_t *idx=0);
float stof(const wstring &str, size_t *idx=0);
double stod(const string &str, size_t *idx=0);
double stod(const wstring &str, size_t *idx=0);
long double stold(const string &str, size_t *idx=0);
long double stold(const wstring &str, size_t *idx=0);
Пробельные символы в начале строки игнорируются. Пример преобразования строки в целое число:
std::string str_dec(" \n\r25");
int x = std::stoi(str_dec);
std::cout << x << std::endl; // 25
Считывание символов заканчивается на символе не являющемся записью числа. Индекс этого символа доступен через параметр idx
, если он не равен нулевому указателю:
std::string str("5s10");
size_t idx = 0;
std::cout << std::stoi(str, &idx) << std::endl; // 5
std::cout << str.substr(idx) << std::endl; // s10
В параметре radix
можно указать систему счисления. Если задано число 0
, то система счисления определяется автоматически:
std::string str_bin("111");
std::string str_oct("025");
std::string str_hex("0xff");
std::cout << std::stoi(str_oct, nullptr, 0) << std::endl; // 21
std::cout << std::stoi(str_bin, nullptr, 2) << std::endl; // 7
std::cout << std::stoi(str_oct, nullptr, 8) << std::endl; // 21
std::cout << std::stoi(str_hex, nullptr, 16) << std::endl; // 255
Если в строке нет числа, то генерируется исключение invalid_argument
. Пример обработки исключения:
std::string str("str");
try {
std::cout << std::stoi(str) << std::endl;
} catch (std::invalid_argument &e) {
std::cout << "Не удалось преобразовать" << std::endl;
} // Результат: Не удалось преобразовать
Если число выходит за диапазон значений для типа, то генерируется исключение out_of_range
. Дополнительно переменной errno
присваивается значение ERANGE
. Пример обработки исключения:
std::string str("2147483649");
try {
std::cout << std::stoi(str) << std::endl;
} catch (std::out_of_range &e) {
std::cout << "Не удалось преобразовать. errno = "
<< errno << std::endl;
} // Результат: Не удалось преобразовать. errno = 34
Обратите внимание: от настроек локали зависит десятичный разделитель вещественных чисел:
std::string str("2,5");
std::setlocale(LC_ALL, "C");
std::cout << std::stod(str) << std::endl; // 2
std::setlocale(LC_ALL, "Russian_Russia.1251");
std::cout << std::stod(str) << std::endl; // 2.5
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов