2016-01-22 16 views
5

私は演算子にcharスタンドを持っていますが、合計で4つの演算子(+ - * /)があります。私はどのように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

私は答えはNOだと思います。 – Sahi

+3

「もっと便利です」とはどういう意味ですか? –

+0

[(演算子の実際の演算子に)演算子を変換する方法はありますか?](http://stackoverflow.com/questions/19242330/is-there-a-way-i) -can-convert-an-char-as-the-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つの離散的な値を取ることができ、とても良い練習は、例えば、列挙型を使用することであるべきですComputeのユーザのみが操作(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; 
} 

私の例ではベストプラクティスを使用していない可能性がありますので、詳細は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