我们是否有一种严格的方式将char *严格转换为int(或long),即只有所有字符都是数字并且可以容纳int(或long)的字符,我们才应获得正确的结果-使用某种方式strtol等。
因此,使用该功能,“sbc45”,“4590k”,“56”,“56”均应无效。
最佳答案
这是一个与@GMan相似的版本,但是它不接受前置空格。例如" 101"
:
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
#include <exception>
long strict_conversion(const std::string& number_string)
{
long number;
std::stringstream convertor;
convertor << std::noskipws << number_string;
convertor >> number;
if( convertor.fail() || !convertor.eof() )
throw std::runtime_error("The string didn't pass the strict conversion!");
return number;
}
一分钟后,这是通用的一分钟:
template <typename NumberType>
NumberType strict_conversion(const std::string& number_string)
{
NumberType number;
std::stringstream convertor;
convertor << std::noskipws << number_string;
convertor >> number;
if( convertor.fail() || !convertor.eof() )
throw std::runtime_error("The string didn't pass the strict conversion!");
return number;
}