Вы можете использовать стандартную функцию C ++ std::strtoul
, а затем проверить, не превышает ли преобразованное число std::numeric_limits<unsigned int>::max()
.
Например,
#include <iostream>
#include <string>
#include <stdexcept>
#include <limits>
int main()
{
std::string s( "42949672963" );
unsigned int n = 0;
try
{
unsigned long tmp = std::stoul( s );
if ( std::numeric_limits<unsigned int>::max() < tmp )
{
throw std::out_of_range( "Too big number!" );
}
n = tmp;
}
catch ( const std::out_of_range &e )
{
std::cout << e.what() << '\n';
}
std::cout << "n = " << n << '\n';
return 0;
}
Вывод программы:
Too big number!
n = 0
Вы также можете добавить еще один улов для недопустимых представлений чисел.
Другой способ - использовать стандартную функцию C strtoul
, если вы не хотите иметь дело с исключениями.