Member 13899738 Ответов: 2

C++ преобразование строки в целое число


Приветствую всех,

В настоящее время я пытаюсь создать программу, которая может преобразовать строку, введенную пользователем, в int.
Я хочу, чтобы это целое число было до 4 294 967 295. В настоящее время я использую stoi для преобразования строки в unsigned int, но каждый раз, когда я пытаюсь ввести число длиной 10 цифр, появляется ошибка "abort() has been called". Я пришел сюда, чтобы выяснить, в чем проблема с моим кодом.

#include <iostream>
#include <string>

using namespace std;

int main()
{

	cout << "4,294,967,295" << endl;
	string numberString;
	
	getline(cin, numberString);

	unsigned int number = stoi(numberString);

	cout << number << endl;

	return 0;
}



Заранее спасибо!

С уважением

Что я уже пробовал:

Я пробовал использовать unsigned long, double, но оба они не работают

2 Ответов

Рейтинг:
5

Shao Voon Wong

stoi предназначен для преобразования 32-битного целого числа со знаком, максимальное значение которого может быть равно 2,147,483,647. Вы должны поймать исключение out_of_range, выброшенное из stoi И, пожалуйста, уберите запятые в вашей числовой строке.

СТД::стои, СТД::стол СТД::Штоль - cppreference.com[^]

Другой альтернативой является использование струнных потоков для преобразования ваших строк в числа.

#include <sstream>
#include <iostream>

int main()
{
	unsigned int n = 0;
	std::istringstream oss("4294967295");
	oss >> n;
	std::cout << n << std::endl;
    return 0;
}


Рейтинг:
13

Peter_in_2780

Это 4.... число равно 2^32-1, что выходит за пределы диапазона 32-битного int, возвращаемого типа stoi Это самое большое число, которое может быть выражено как UNSIGNED int, поэтому вам нужно использовать stoul или что-то еще, что будет возвращать числа больше, чем знак int. В качестве альтернативы вы можете использовать sscanf с преобразованием типа %u или что-то "большее".