代码:
#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
。
答案 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);
}
来自@RemyLebeau的评论:
以上检查,因为这并不能保证字符串中的所有字符都是数字。
std::stoi()
解析整个字符串,然后报告第一个非数字字符的索引,即使这是空终止符。它还会跳过前导空格,因此检查第一个字符可能会导致std::stoi()
通常成功的错误结果。