C 给定的字符串是否可转换为整数

C 给定的字符串是否可转换为整数,c,string,integer,C,String,Integer,在C语言中有没有一种有效的方法来检查给定的字符串是否可以转换为整数? 输出错误应指示字符串是否可转换。 例如,“aa”是不可转换的,“123”是可转换的。对于C,使用带有结束指针的函数: char* end=NULL; long l = strtol(cstr, &end, 0); if (end >= cstr && *end) badnumber = true; else badnumber = false; 对于C++11,使用函数(

在C语言中有没有一种有效的方法来检查给定的字符串是否可以转换为整数?
输出错误应指示字符串是否可转换。
例如,“aa”是不可转换的,“123”是可转换的。

对于C,使用带有结束指针的函数:

 char* end=NULL;
 long l = strtol(cstr, &end, 0);
 if (end >= cstr && *end)
    badnumber = true;
 else
    badnumber = false;
对于C++11,使用函数(失败时会引发异常)。

对于C,使用带有结束指针的函数:

 char* end=NULL;
 long l = strtol(cstr, &end, 0);
 if (end >= cstr && *end)
    badnumber = true;
 else
    badnumber = false;

使用C++11时,使用该函数(失败时会引发异常)。

您还可以通过字符串和appply
isdigit
函数对每个字符进行循环您还可以通过字符串和appply
isdigit
函数对每个字符进行循环C++11具有
std::stoi
std::stol
,和
std::stol
,如果字符串无法转换,则会引发异常。

C++11具有
std::stoi
std::stol
std::stoll
,如果字符串无法转换,则会引发异常。

可能最好问两个独立的问题-每种语言的最佳答案可能非常不同(尽管有资格回答的人会有很多重叠)。您是否可以将“123aa”转换为整数?“123aa”无法转换为整数。请检查strspn(str,“0123456789)=strlen(str)最好是选择C XOR C++。如果有人发布了完美的C答案,而另一个则发布了完美的C++答案。你会接受哪一个?——编辑:我现在将删除C++标签,现在已经有C答案了。——编辑:因为混乱成功,我将再次添加C++标签。是-对于每种语言的最佳答案可能非常不同(虽然在回答的人中会有很多重叠)。“123AA”是否可以转换成整数?“123AA”不能转换为整数。检查是否STRSPN(STR,“0123456789”)= StruLn(STR),最好是选择C XOR C++。如果有人发布完美的C答案,而另一个发布完美C++答案呢?你会接受哪一个编辑:我将删除C++标签,现在你已经有C答案了。编辑:因为混乱成功了,我将再次添加C++标签。但是你必须处理可选的<代码> ->代码>符号前缀!注意“长”数字序列。但是你必须处理可选的
-
符号前缀!注意“长”数字序列。值得注意的是,如果您试图转换包含1323723172981729817298172989798271972198728917918729817928的字符串,则这些数字序列也会引发异常,因为它大于最大整数。(以上所有变量都有
无符号
变体)。@matstpeterson
float
ing变体值得注意的是,如果您试图转换包含132372317298172998172998798271972198728917918729817928的字符串,这些变量也会引发异常,因为它大于最大整数。(还有上述所有的
无符号的
变体)。@matstpeterson
float
ing变体为什么
if(end&&…
?你的意思是
if(end>cstr&&…
?您还检查了“溢出”,将此答案与重复的问题进行比较。为什么
if(end&&…
?你的意思是
if(end>cstr&&…
?您还检查了“溢出”,将此答案与重复问题进行比较。
bool is_convertible_to_int(const std::string &s) {
  try {
    int t = std::stoi(s);
    return std::to_string(t).length() == s.length();
  }
  catch (std::invalid_argument) {
    return false;
  }
}