Преобразовать строку в int в C++
В этом посте мы обсудим, как преобразовать строку в int в C++.
1. Использование std::stoi функция
Стандартный подход заключается в использовании std::stoi функция преобразования строки в целое число. stoi функция была введена в C++11 и определена в заголовке . Он бросает std::invalid_argument или же std::out_of_range исключение при неправильном вводе или целочисленном переполнении соответственно. Стоит отметить, что он будет преобразовывать такие строки, как 10xyz в целое число 10 .
std :: string s = «10» ;
int i = std :: stoi ( s ) ;
std :: cout << i << std :: endl ;
catch ( std :: invalid_argument const &e ) <
std :: cout << "Bad input: std::invalid_argument thrown" << std :: endl ;
catch ( std :: out_of_range const &e ) <
std :: cout << "Integer overflow: std::out_of_range thrown" << std :: endl ;
2. Использование строковых потоков
std::stringstream можно использовать для преобразования std::string к другим типам данных и наоборот. Это страдает от той же проблемы, что и std::stoi сделал, т. е. он будет преобразовывать строки, подобные 10xyz в целое число 10 . Он возвращается INT_MAX или же INT_MIN если преобразованное значение находится вне диапазона целочисленного типа данных. Если значение строки не может быть представлено как int, возвращается 0.
std :: string s = «10» ;
std :: istringstream ( s ) >> i ;
std :: cout << i << std :: endl ;
3. Использование boost::lexical_cast
Другой хорошей альтернативой является использование boost::lexical_cast . Он бросает boost::bad_lexical_cast исключение, когда не может быть построено допустимое целое число или происходит переполнение.
std :: string s = «10» ;
i = boost :: lexical_cast < int >( s ) ;
std :: cout << i << std :: endl ;
catch ( boost :: bad_lexical_cast const &e ) < // неверный ввод
std :: cout << "error" << std :: endl ;
4. Использование std::atoi функция
Мы также можем использовать std::atoi функция для преобразования строки в int. Он принимает C-строку в качестве параметра, поэтому нам нужно преобразовать нашу строку в C-строку. Мы можем сделать это, используя std::string::c_str .
Обратите внимание, что его поведение не определено, если преобразованное значение выходит за пределы диапазона целочисленного типа данных. Если значение строки не может быть представлено как int, возвращается 0.
Как преобразовать string в int?
Так не получается. Раньше, кажется, как-то преобразовывал, а как — не помню.
Добавлено через 21 минуту 53 секунды
Всё, понял, как надо:
string s = "5"; int i = Convert.ToInt32(s);
Извиняюсь за беспокойство !
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как преобразовать в базе из int в string
Добрый день.Такая проблемма.Тут ругается на файл в кейсе на цифру 1 типо преобразовать в string.

Как преобразовать string в int?
Как преобразовать string в int? Задача такая: в реестре записывается счётчик открытия программы, и.
Как правильно преобразовать string в int[]?
Такой вот маневр не проходит, а подходящих конверторов не знаю int mass =.
Как преобразовать int в string в выводе на консоль?
Чтобы вывести value. static void Method(out int i, out string s1, out string s2) < .
Как перевести элемент строки в int?
Как перевести элемент строки (string) в int?
Пробовал разные способы такие как atoi(), stoi(), и простой перевод в int().
При atoi() и stoi() возникают ошибки такие как error: invalid conversion from
При простом переводе int выводит 0
То есть у нас есть строка типа string и нужно обратиться к одному из его элементов и перевести его в int.
string str = "123456789101112"; int el = atoi(str1[2].c_str()); // в данном случаи выводит ошибку
- Вопрос задан более трёх лет назад
- 1391 просмотр
Комментировать
Решения вопроса 2

Roman @myjcom Куратор тега C++
std::string s = "123456789101112"; int i = s[2] - '0';
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
badproger12years @badproger12years Автор вопроса
нужно обратиться к элементу и вычтить из него 0.
string str1 = "12345678"; int b = str1[1] - '0'; cout
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- C++
- +1 ещё
В чем ошибка кода?
- 1 подписчик
- 7 часов назад
- 96 просмотров
Перевод string в integer
Спасибо, все работает. Долго ломал голову и гуглил. А можешь пару коментов дать к параметрам функции этой?
2 мая 2011 в 20:29
ВНИМАНИЕ. Способ устарел, сейчас (2018) лучше использовать stoi.
24 сен 2018 в 21:44
И чтобы не надо было вчитываться в документацию, замечу, stoi использует strtol со всеми ее фичами
24 сен 2018 в 23:08
#include #include #include using namespace std; int main () < string S = "74"; istringstream iss (S, istringstream::in); int val; iss >> val; return 0; >
Отслеживать
ответ дан 2 мая 2011 в 17:35
1,905 13 13 серебряных знаков 16 16 бронзовых знаков
#include #include using namespace std; void main() < string str = "1234567890"; int num = NULL; for (int i = 0; i < str.length(); i++)< num = num*10 + str[i] - 0x30; >cout
Отслеживать
ответ дан 8 дек 2016 в 16:10
21 3 3 бронзовых знака
int num = NULL; .
8 дек 2016 в 16:12
оно работать будет, но да, выглядит дико. Но точка с запятой после include - это интересно.
8 дек 2016 в 16:14
сделай так, если страшно: int num = 0;
8 дек 2016 в 16:26
можно написать по всякому, но лучше писать так, как принято. Но в 2016 году лучше использовать std::stoi.
8 дек 2016 в 16:40
это сильно просто:
8 дек 2016 в 16:54
using namespace std; void main()
Отслеживать
ответ дан 10 янв 2022 в 19:31
Vasyl Androshchook Vasyl Androshchook
11 2 2 бронзовых знака
В текущем виде ваш ответ непонятен. Пожалуйста, нажмите править под сообщением, чтобы добавить больше подробностей, которые помогут другим понять, как он отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в Справке.
10 янв 2022 в 19:33
добро пожаловать на stack overflow на русском! пожалуйста, постарайтесь оставлять чуть более развёрнутые ответы. дополнить ответ можно, нажав править