2016-01-22 7 views
5

Ich habe ein Zeichen stehen für einen Operator, gibt es vier Operatoren (+ - * /) insgesamt.konvertieren Char zu arithmetischen Operator

Wie ich tue:

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

Gibt es einen bequemen Weg, dies zu tun?

+3

Ich denke, die Antwort ist nein. – Sahi

+3

was meinst du mit 'bequemer'? –

+0

Mögliches Duplikat von [gibt es eine Möglichkeit, einen Operator als char + in den tatsächlichen Operator für Arithmetik zu konvertieren?] (Http://stackoverflow.com/questions/19242330/is-there-a-way-i -Konvertieren-ein-Operator-als-Char-in-den-tatsächlichen-Operator) – Henrik

Antwort

4

Sie eine switch-Anweisung verwenden:

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

können Sie einen Check für b! = 0 im Falle der Division hinzufügen –

0

Zunächst wird die Syntax

else (a == '/') 
    return a/b; 

falsch ist, und sollte

else if (a == '/') 
    return a/b; 

Zweitens sein, Ihre a Parameter nur vier diskrete Werte annehmen kann, so gute Praxis ist eine Aufzählung zu verwenden, z.B.

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

, die sicherstellt, dass der Benutzer von Compute nur eine dieser vier Werte für die Operation (a) Parameter verwenden wird.

Ich habe wahrscheinlich keine Best Practices in meinem Beispiel verwendet, daher empfehle ich Ihnen, lesen Sie this answer für weitere Details.

Schließlich könnten Sie den Code übersichtlicher machen, indem ein Schalter-Anweisung:

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

Ja, hast du recht. aber warum sonst (a == '/') ist falsch? – Superxy

+0

@Superxy Siehe dieses Tutorial für die korrekte Syntax. http://www.cplusplus.com/doc/tutorial/control/ – Archimaredes

+0

Ich verstehe es jetzt, danke. – 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

Während dies die Frage beantworten kann, ist es besser, einige Erklärungen zur Verfügung zu stellen, wie dieser Code hilft. – vard