我使用std::isdigit
实现了这个question的可接受答案:
#include <string>
#include <ctype.h>
using namespace std;
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();
}
C2672 'std::isdigit': no matching overloaded function found.
<string>
,<cctype>
,<ctype.h>
和<stdlib.h>
没有任何帮助。最佳答案
函数isdigit()
在C头ctype.h
或C++头cctype
中定义。
如果您从C++文件中包含ctype.h
,则isdigit()
是在全局 namespace 中定义的(某些实现也位于std::中)。
相反,如果您从C++文件中包含cctype
,则isdigit()
是在标准 namespace std::
中定义的(某些实现也位于全局 namespace 中)。
在您的情况下,您具有#included <ctype.h>
,并且在Windows上看起来像这意味着它仅在全局 namespace 中可用。因此std::isdigit()
与任何已知函数都不匹配。尝试将include更改为#include <cctype>
。
#include <cctype>
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++ - 为什么 “std::isdigit”在Windows上的C++中报告 “no matching overloaded function”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58944350/