我在编写一个检查字符串是否为数字的函数时遇到了很多麻烦.对于我正在编写的游戏,我只需要检查我正在阅读的文件中的一行是否是一个数字(我会知道这是一个参数).我编写了以下功能,我相信它工作顺利(或者我不小心编辑了以阻止它,或者我是精神分裂症或Windows是精神分裂症):
bool isParam (string line)
{
if (isdigit(atoi(line.c_str())))
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何在C++中将字符串解析为int?
如何将C++字符串转换为int?
假设您希望字符串中包含实际数字(例如,"1","345","38944").
另外,让我们假设你没有提升,你真的想用C++方式来做,而不是狡猾的旧C方式.
我一直在寻找一种方法来确定我的字符串值是否是一个有效的双倍,而我还没有找到一种方法也不会拒绝一个带有一个点的数字...
在我的搜索中,我找到了这个
而Charles Salvia给出的答案是
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();
}
Run Code Online (Sandbox Code Playgroud)
这适用于任何没有点的数字,但有点的数字会被拒绝...
是否有更好,更优雅(和/或可能更快)的方式
boolean isNumber = false;
try{
Double.valueOf(myNumber);
isNumber = true;
} catch (NumberFormatException e) {
}
Run Code Online (Sandbox Code Playgroud)
...?
编辑:因为我不能选择两个答案我正在使用正则表达式,因为a)它优雅而且b)说"Jon Skeet解决了问题"是一个重言式,因为Jon Skeet本身就是所有问题的解决方案.