2016-01-22 118 views
5

我有一个字符表示运算符,共有四个运算符(+ - * /)。将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; 
} 

有没有更方便的方式来做到这一点?

+3

我认为答案是否定的。 – Sahi

+3

“更方便”是什么意思? –

+0

[有没有一种方法可以将操作符转换为字符“+”为算术的实际运算符?](http://stackoverflow.com/questions/19242330/is-there-a-way-i -can-convert-an-operator-as-a-char-into-the-actual-operator) – Henrik

回答

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"); 
    } 
} 
+0

您可以在除法 –

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; 
    } 
} 
+0

是的,你说得对。但为什么其他(a =='/')是错误的? – Superxy

+0

@Superxy请参阅本教程以了解正确的语法。 http://www.cplusplus.com/doc/tutorial/control/ – Archimaredes

+0

我现在明白了,谢谢。 – Superxy

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; 
} 
+0

的情况下为b!= 0添加检查虽然这可以回答问题,但最好提供一些关于此代码如何提供帮助的解释。 – vard