如何解析包含整数的字符串并检查是否大于 C++ 中的最大值
How to parse a string containing an integer and check if greater than a maximum in c++
我想确定(在 C++ 中)字符串是否包含 0 - UINT_MAX 范围内的数字
我试过 atoi 等,但不处理这种情况。
例如字符串 42949672963 将无法通过测试
有人有什么建议吗?
现代的方法是使用std::stoi、std::stoll等
string 和 wstring 有重载,可以处理更大的尺寸。
您可以在循环中逐个字符地搜索字符串,每次连续出现数字时,您都可以构建一个整数,同时使用 Max UINT 进行检查。
你可以使用标准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
。
我想确定(在 C++ 中)字符串是否包含 0 - UINT_MAX 范围内的数字 我试过 atoi 等,但不处理这种情况。 例如字符串 42949672963 将无法通过测试 有人有什么建议吗?
现代的方法是使用std::stoi、std::stoll等
string 和 wstring 有重载,可以处理更大的尺寸。
您可以在循环中逐个字符地搜索字符串,每次连续出现数字时,您都可以构建一个整数,同时使用 Max UINT 进行检查。
你可以使用标准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
。