我有一个操作员的字符表,总共有四个操作符(+ - * /)。
我是怎么做的:
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;
}
有更方便的方法吗?
答案 0 :(得分:4)
您可以使用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");
}
}
答案 1 :(得分:0)
首先是语法
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;
}
}
答案 2 :(得分:0)
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;
}