c++ - 如何确定字符串是否为 C++ 中的数字?

标签 c++ visual-c++

我在尝试编写一个检查字符串是否为数字的函数时遇到了很多麻烦。对于我正在编写的游戏,我只需要检查我正在读取的文件中的一行是否是数字(我会知道它是否是这样的参数)。我编写了以下函数,我认为它运行顺利(或者我不小心编辑以停止它,或者我精神 split 症或 Windows 精神 split 症):

bool isParam (string line)
{
    if (isdigit(atoi(line.c_str())))
        return true;

    return false;
}

最佳答案

最有效的方法是遍历字符串,直到找到一个非数字字符。如果有非数字字符,可以认为字符串不是数字。

bool is_number(const std::string& s)
{
    std::string::const_iterator it = s.begin();
    while (it != s.end() && std::isdigit(*it)) ++it;
    return !s.empty() && it == s.end();
}

或者如果你想用 C++11 的方式来做:

bool is_number(const std::string& s)
{
    return !s.empty() && std::find_if(s.begin(), 
        s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end();
}

正如下面评论中所指出的,这仅适用于正整数。如果您需要检测负整数或分数,您应该使用更强大的基于库的解决方案。虽然,添加对负整数的支持非常简单。

关于c++ - 如何确定字符串是否为 C++ 中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4654636/

相关文章:

C++ 模板性能包含模型和内联模型

c++ - 在 win32 上将 wav 文件解码为 raw

c++ - 在 C++ 中将 int[] 转换为 String

windows - 创建 Windows GUI .exe 应用程序

c++ - libev 将套接字设置为无超时阻塞

c++ - 如何在C++中获取字符串中的输入?

c++ - 在我的项目中添加 mysql.h 是否足够或还需要其他库才能工作

c++ - 如何使 C++ 程序跨编译器工作

c# - char * 在托管代码中?

c++ - 字符指针(由 new 分配)及其初始化