如何检查字符串是否正确将其转换为int?

时间:2020-05-20 21:40:26

标签: c++ string int

现在,我仅讨论stl函数。不是这样的:

for (char c : s) {
  if (c < '0' || c > '9') {
    return false;
  }
}

2 个答案:

答案 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::stoi3x都将返回{{ 1}})。