如何用C++判断一个字符串是否是数字?

2024-05-21

我在尝试编写一个检查字符串是否为数字的函数时遇到了很多麻烦。对于我正在编写的游戏,我只需要检查我正在读取的文件中的一行是否是数字(这样我就会知道它是否是参数)。我写了下面的函数,我相信它工作得很顺利(或者我不小心编辑了它来阻止它,或者我有精神分裂症,或者Windows有精神分裂症):

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();
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用C++判断一个字符串是否是数字? 的相关文章

随机推荐