c++ - 严格字符串转int[long]

标签 c++

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

关于c++ - 严格字符串转int[long],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065708/

相关文章:

c# - 对 3 个数字进行无分支排序

c++ - LNK2005 - 在 .hpp 文件中声明函数时出错

c++ - 如何用 'malloc' 和 'free' 替换 'new' 和 'delete' ?

用于性能优化的 C++ 分离函数

c++ - 快速调整 mmap 文件的大小

c++ - 在 Linux 上增加文件需要任何费用吗?

c++ - yum : using boost 1. 69 而不是 centos 上的默认 (1.53) 版本

c++ - 进入拖放过程(或任何其他系统调用)

c++ - 在 Windows 上以编程方式获取硬件线程数的可靠方法

c++ - 创建类的可变包装器