为什么isdigit()不起作用?

时间:2017-03-29 21:56:34

标签: c++ function

代码:

#include <iostream>
#include <string>
using namespace std;
string s1,s2,s3,s4,s5;
int ex(string s){
    int i;
    if(isdigit(s)){
        i = atoi(s.c_str);
    }
    else 
        return -1;
    return i;
}

int main(){
    int t;cin>>t;int v1,v2,v3;
    while(t--){
        cin>>s1>>s2>>s3>>s4>>s5;
        v1=ex(s1);
        v2=ex(s2);
        v3=ex(s3);
        if(v1<0) v1=v3-v2;
        if(v2<0) v2=v3-v1;
        if(v3<0) v3=v1+v2;
        cout<<v1<<" + "<<v2<<" = "<<v3;
        }
    }
    return 0;
}

错误:

error: no matching function for call to 'isdigit(std::string&)'
     if(isdigit(s)){

我尝试搜索所有以前的帖子,但仍然无法弄清楚为什么isdigit(s)功能不起作用。 问题是表格会有输入 47 + machula = 53,马丘拉就是一个词 输出应为47 + 6 = 53

1 个答案:

答案 0 :(得分:0)

isdigit用于检查单个字符是否为数字,而不是字符串。这就是调用isdigit(s)无法编译的原因。

您可以使用std::stoi。但是,请记住,如果函数无法执行转换,它将抛出异常。

try
{
   i = std::stoi(s);
}
catch ( ... )
{
   // Deal with the exception
}

在尝试使用std::stoi之前,您还可以检查字符串的第一个字符是否为数字。

if ( !(s.empty()) && isdigit(s[0]) )
{
   i = std::stoi(s);
}

NB

来自@RemyLebeau的评论:

  

以上检查,因为这并不能保证字符串中的所有字符都是数字。 std::stoi()解析整个字符串,然后报告第一个非数字字符的索引,即使这是空终止符。它还会跳过前导空格,因此检查第一个字符可能会导致std::stoi()通常成功的错误结果。