将char转换为算术运算符
我有一个字符表示运算符,共有四个运算符(+ - * /)。将char转换为算术运算符
我怎么做的:
int Compute(char c, int a, int b)
{
if(c == '+')
return a+b;
else if(c == '-')
return a-b;
else if(c == '*')
return a*b;
else (c == '/')
return a/b;
}
有没有更方便的方式来做到这一点?
你可以使用switch语句:
int Compute(char c, int a, int b)
{
switch (c) {
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
default: throw std::runtime_error("No such operator");
}
}
您可以在除法 –
首先,语法
else (a == '/')
return a/b;
是错误的,应该是
else if (a == '/')
return a/b;
其次,你a
参数只能取4个离散值,因此好的做法是使用一个枚举,例如
enum Operation
{
kAddition,
kSubtraction,
kMultiplication,
kDivision
};
int Compute(Operation a, int a, int b)
{
if (a == kAddition)
return a+b;
else if (a == kSubtraction)
return a-b;
else if (a == kMultiplication)
return a*b;
else if (a == kDivision)
return a/b;
}
其确保的Compute
用户将仅使用这四个值中的一个的操作(a
)参数。
我可能没有在我的例子中使用最佳实践,所以我建议你阅读this answer以获得更多细节。
最后,你可以使代码更简洁使用switch语句:
enum Operation
{
kAddition,
kSubtraction,
kMultiplication,
kDivision
};
int Compute(Operation a, int a, int b)
{
switch (a)
{
case kAddition:
return a+b;
case kSubtraction:
return a-b;
case kMultiplication:
return a*b;
case kDivision:
return a/b;
}
}
是的,你说得对。但为什么其他(a =='/')是错误的? – Superxy
@Superxy请参阅本教程以了解正确的语法。 http://www.cplusplus.com/doc/tutorial/control/ – Archimaredes
我现在明白了,谢谢。 – Superxy
int ComputeByChar(char a, int c, int b)
{
switch(a)
{
case '+': return c+b;
case '-': return c-b;
case '/': return c/b;
case '*': return c*b;
default: cout<< "Invalid";
break;
}
return 0;
}
的情况下为b!= 0添加检查虽然这可以回答问题,但最好提供一些关于此代码如何提供帮助的解释。 – vard
我认为答案是否定的。 – Sahi
“更方便”是什么意思? –
[有没有一种方法可以将操作符转换为字符“+”为算术的实际运算符?](http://stackoverflow.com/questions/19242330/is-there-a-way-i -can-convert-an-operator-as-a-char-into-the-actual-operator) – Henrik