2016-01-22 20 views
5

Ho un supporto char per un operatore, ci sono quattro operatori (+ - * /) in totale.convertito char in operatore aritmetico

come ho fatto:

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

C'è un modo più conveniente per fare questo?

+3

Penso che la risposta è NO. – Sahi

+3

cosa intendi con 'più conveniente'? –

+0

Possibile duplicato di [esiste un modo per convertire un operatore come carattere "+" nell'operatore effettivo per l'aritmetica?] (Http://stackoverflow.com/questions/19242330/is-there-a-way-i -can-convert-an-operator-as-a-char-in-the-actual-operator) – Henrik

risposta

4

è possibile utilizzare un'istruzione 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

potresti aggiungere un controllo per b! = 0 in caso di divisione –

0

In primo luogo, la sintassi

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

è sbagliato, e dovrebbe essere

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

secondo luogo, il parametro a può avvenire solo 4 valori discreti, così buona pratica è quello di utilizzare un'enumerazione, ad esempio

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

che assicura che l'utente del Compute utilizza solo uno di questi quattro valori per l'operazione (a) parametro.

Probabilmente non ho utilizzato le migliori pratiche nel mio esempio, quindi vi consiglio di leggere this answer per maggiori dettagli.

Infine si potrebbe rendere il codice più conciso utilizzando un'istruzione 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

Sì, hai ragione. ma perché altrimenti (a == '/') è sbagliato? – Superxy

+0

@Superxy Vedere questo tutorial per la sintassi corretta. http://www.cplusplus.com/doc/tutorial/control/ – Archimaredes

+0

Lo capisco ora, grazie. – 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

Mentre questo può rispondere alla domanda, è meglio fornire alcune spiegazioni su come questo codice aiuti. – vard