发布日期:2018-03-26
怎么用c++确定一个字符串是否为数字?+ 查看更多
怎么用c++确定一个字符串是否为数字?
+ 查看更多
发布日期:2018-02-26 10:51
分类:CPlusPlus
浏览次数:715
我尝试过写一个用来检测一个字符串是否为数字的函数,用在我的游戏中来确定正在读取的文件中某一行是否为一个参数。我写了以下的函数,我相信它可以顺利的实现效果,要不就是我不小心更改了它或者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(), [](char c) { return !std::isdigit(c); }) == s.end(); }
以上方法仅适于检测正整数,如果要检测负整数或者分数,你应该使用基于库的方案,虽然增加对负整数的支持是微不足道的(只需‘-’检测)。