
Функция stoi входит в стандартную библиотеку string и предназначена для преобразования строковых значений в целые числа типа int. Она принимает на вход строку и, при необходимости, указатель на позицию первого символа, который не был преобразован, а также основание системы счисления. Это позволяет работать не только с десятичными числами, но и с двоичными, восьмеричными и шестнадцатеричными представлениями.
Использование stoi облегчает обработку пользовательского ввода. Например, при чтении чисел из текстового файла или консоли строковые данные можно сразу преобразовать в целые числа без применения ручного разбора и циклов. Функция автоматически игнорирует ведущие пробелы и корректно обрабатывает знак числа, что снижает вероятность ошибок при конвертации.
При работе с stoi важно учитывать возможные исключения: std::invalid_argument возникает, если строка не содержит цифр, а std::out_of_range – при переполнении типа int. Для надежного кода рекомендуется оборачивать вызовы функции в блоки try-catch и проверять диапазон значений. Это особенно актуально при обработке данных из внешних источников.
Функция stoi совместима с современными компиляторами C++11 и выше. При необходимости можно использовать дополнительные параметры для получения позиции первого непреобразованного символа, что упрощает работу с комплексными строками, содержащими числа и текст одновременно. Это делает stoi универсальным инструментом для преобразования числовых данных в программах на C++.
Подключение библиотеки для работы со строками
Для использования функции stoi необходимо подключить библиотеку string, которая входит в стандартный набор C++. Подключение осуществляется с помощью директивы #include <string>. Эта библиотека содержит класс std::string и методы для работы с текстовыми данными, включая преобразование строк в числа.
| Библиотека | Назначение |
|---|---|
| <string> | Предоставляет класс std::string и функцию stoi для преобразования строк в int |
| <stdexcept> | Содержит исключения std::invalid_argument и std::out_of_range |
После подключения библиотек можно создавать строки, вводить их с консоли или из файла и применять stoi для преобразования в целые числа. Рекомендуется использовать пространство имен std либо явно указывать std::string и std::stoi для читаемости кода и предотвращения конфликтов.
Синтаксис функции stoi и основные параметры
Функция stoi используется для преобразования строкового значения в целое число типа int. Основной синтаксис:
- int stoi(const std::string &str, std::size_t *pos = 0, int base = 10);
Описание параметров:
- str – строка, содержащая число для преобразования. Может включать ведущие пробелы и знак числа (+ или -).
- pos – указатель на объект типа size_t, который после выполнения функции содержит индекс первого символа строки, не использованного при преобразовании. Если параметр не нужен, можно оставить значение по умолчанию 0.
- base – основание системы счисления. Допустимые значения: 2, 8, 10, 16. По умолчанию используется десятичная система.
Рекомендации по использованию:
- Если строка может содержать текст после числа, указывайте параметр pos для определения конца числовой части.
- При работе с нестандартными системами счисления указывайте соответствующее значение base, иначе результат будет некорректным.
- Всегда оборачивайте вызов stoi в блок try-catch для перехвата std::invalid_argument и std::out_of_range, чтобы избежать ошибок выполнения.
Преобразование строк в целые числа с десятичной системой

Функция stoi по умолчанию использует десятичную систему счисления. Для преобразования строки в целое число достаточно передать текстовое значение в параметр str и вызвать функцию без указания основания или с base = 10:
int число = std::stoi(«12345»);
Функция автоматически игнорирует ведущие пробелы и корректно обрабатывает знак числа:
int положительное = std::stoi(«+678»);
int отрицательное = std::stoi(«-42»);
При обработке пользовательского ввода рекомендуется проверять строки на наличие недопустимых символов. Если строка содержит текст после числа, можно использовать параметр pos для получения индекса первого непреобразованного символа:
std::size_t позиция;
int число = std::stoi(«256px», &позиция);
После выполнения позиция будет равна 3, что указывает на начало текста «px».
Для предотвращения ошибок переполнения следует контролировать диапазон значений типа int. Строки, представляющие числа больше INT_MAX или меньше INT_MIN, вызовут исключение std::out_of_range.
Обработка ошибок при некорректных строках
Функция stoi генерирует исключения при попытке преобразовать строку, которая не соответствует числовому формату или выходит за пределы диапазона типа int. Основные исключения:
std::invalid_argument – возникает, если строка не содержит цифр или состоит только из пробелов. Например, вызов std::stoi(«abc») приведет к этому исключению.
std::out_of_range – возникает при попытке преобразовать число, превышающее INT_MAX или меньше INT_MIN. Пример: std::stoi(«9999999999») на 32-битной системе вызовет это исключение.
Для безопасной обработки ошибок рекомендуется использовать блок try-catch:
try {
int число = std::stoi(строка);
} catch (const std::invalid_argument &e) {
// Обработка некорректного формата строки
} catch (const std::out_of_range &e) {
// Обработка числового переполнения
}
Дополнительно можно проверять длину строки и диапазон символов перед вызовом stoi, чтобы снизить вероятность возникновения исключений при работе с пользовательским вводом или внешними файлами.
Использование stoi с различными системами счисления
Функция stoi поддерживает преобразование строк в целые числа с разными основаниями системы счисления, задаваемыми параметром base. Допустимые значения: 2, 8, 10 и 16.
Пример для двоичной системы:
int двоичное = std::stoi(«1011», nullptr, 2); // результат 11
Пример для восьмеричной системы:
int восьмеричное = std::stoi(«17», nullptr, 8); // результат 15
Пример для шестнадцатеричной системы:
int шестнадцатеричное = std::stoi(«1F», nullptr, 16); // результат 31
При работе с нестандартными системами счисления важно учитывать, что символы в строке должны соответствовать выбранной системе: для двоичной – только 0 и 1, для восьмеричной – цифры от 0 до 7, для шестнадцатеричной – 0–9 и A–F/a–f.
Если строка содержит недопустимые символы, функция вызовет std::invalid_argument. Для безопасного преобразования рекомендуется использовать блок try-catch и проверять корректность строки перед вызовом stoi.
Примеры преобразования пользовательского ввода

Функция stoi позволяет сразу преобразовать ввод пользователя в целое число. Для работы с консолью подключают iostream и используют std::getline для чтения строки:
std::string ввод;
std::getline(std::cin, ввод);
int число = std::stoi(ввод);
Если пользователь вводит число с пробелами или знаком, stoi корректно обрабатывает строку:
std::string ввод = » -42″;
int результат = std::stoi(ввод); // результат -42
При необходимости определить позицию первого непреобразованного символа используют параметр pos:
std::size_t позиция;
int число = std::stoi(«123abc», &позиция);
После выполнения позиция будет равна 3, что указывает на начало текста «abc».
Для безопасной обработки пользовательского ввода рекомендуется использовать блок try-catch:
try {
int число = std::stoi(ввод);
} catch (const std::invalid_argument &e) {
// Сообщение о некорректном вводе
} catch (const std::out_of_range &e) {
// Сообщение о выходе числа за диапазон int
}
Особенности работы stoi с большими числами

Функция stoi возвращает значение типа int, что ограничивает диапазон чисел значениями INT_MIN (-2147483648) и INT_MAX (2147483647) на большинстве систем. Любое число за пределами этого диапазона вызовет исключение std::out_of_range.
Для работы с большими числами, превышающими диапазон int, следует использовать функции stol или stoll, которые возвращают long и long long соответственно:
long long большоеЧисло = std::stoll(«9223372036854775807»);
При преобразовании строк, содержащих числа близкие к границам типа int, рекомендуется проверять длину строки и символы числа, чтобы минимизировать вероятность выброса исключения. Всегда оборачивайте вызовы stoi в блок try-catch для корректного реагирования на переполнение.
Использование параметра pos позволяет отделить цифры числа от дополнительного текста, что важно при обработке пользовательского ввода с большими значениями. Это позволяет безопасно извлекать числовую часть и избегать ошибок при дальнейших вычислениях.
Вопрос-ответ:
Какая библиотека необходима для использования функции stoi в C++?
Для работы с функцией stoi нужно подключить библиотеку <string>, так как она содержит класс std::string и методы для преобразования строк в числа. Дополнительно часто подключают <iostream> для ввода/вывода данных и <stdexcept> для обработки исключений, возникающих при некорректных строках или переполнении.
Какой синтаксис функции stoi и какие параметры она принимает?
Функция имеет вид int stoi(const std::string &str, std::size_t *pos = 0, int base = 10). Параметр str содержит строку для преобразования. pos позволяет определить индекс первого непреобразованного символа, а base задаёт основание системы счисления (например, 10 для десятичной, 16 для шестнадцатеричной). Если pos и base не нужны, можно использовать значения по умолчанию.
Как обработать ошибки при преобразовании некорректных строк?
Функция stoi выбрасывает исключения std::invalid_argument, если строка не содержит чисел, и std::out_of_range, если число выходит за диапазон int. Для обработки ошибок используют блок try-catch. Пример: try { int число = std::stoi(строка); } catch (const std::invalid_argument &e) { /* обработка некорректного ввода */ } catch (const std::out_of_range &e) { /* обработка переполнения */ }
Можно ли использовать stoi для чисел в разных системах счисления?
Да, функция принимает третий параметр base, который позволяет преобразовывать строки в числа с основанием 2, 8, 10 или 16. Например, std::stoi(«1011», nullptr, 2) вернёт 11, а std::stoi(«1F», nullptr, 16) вернёт 31. При этом все символы строки должны соответствовать выбранной системе счисления, иначе будет исключение std::invalid_argument.
Что делать, если нужно преобразовать очень большое число, превышающее диапазон int?
Функция stoi ограничена типом int, поэтому числа за пределами INT_MIN и INT_MAX вызовут исключение std::out_of_range. Для больших чисел используют stol или stoll, которые возвращают long и long long соответственно. При этом также рекомендуется использовать блок try-catch для перехвата возможных ошибок переполнения.
