我们是否有一种严格的方式将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;
}

10-08 00:49