现在,我仅讨论stl函数。不是这样的:
for (char c : s) {
if (c < '0' || c > '9') {
return false;
}
}
答案 0 :(得分:2)
我不相信有内置函数可以执行此操作,但是您可以使用算法来执行此操作:
bool is_valid_int(const std::string& s)
{
return std::all_of(std::begin(s), std::end(s),
[](unsigned char c) {
return std::isdigit(c);
});
}
请注意,此解决方案仅检查字符串的所有字符是否均为数字。要检查它是否可以转换为整数,可以执行以下操作:
int n;
try { n = std::stoi(s); }
catch(...) { /* do something */ }
答案 1 :(得分:0)
您可以使用strtol
进行转换,然后检查整个字符串是否已耗尽,例如:
bool string_is_valid(std::string s)
{
char const *startptr = s.c_str();
char *endptr;
strtol(startptr, &endptr, 10);
return endptr - startptr == s.size();
}
无论转换成功与否,始终设置endptr
。
如果区分对于long
正确但在int
范围之外的值很重要,那么您将需要存储strtol
的返回值并针对{{ 1}}和INT_MAX
。
此选项与INT_MIN
的不同之处在于,后者没有提供任何有关有效数字后是否还有其他尾随字符的信息(例如std::stoi
和3x
都将返回{{ 1}})。