1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
include <iostream> using ; //Retourne la valeur de la sous-expression de la chaîne e //commençant à la position i. Au retour de la fonction, i //est la position du caractère qui suit la sous-expression //évaluée. int evalAux(char e[], int &i) { //Si le premier caractère est '('. //La sous-expression est donc une somme, //une différence, ... if (e[i] == '(') { i++; //On passe la parenthèse. int valOpGche = evalAux(e, i); //Valeur de l'opérande gauche. char op = e[i]; //Récupération de l'opérateur. i++; //On passe l'opérateur. int valOpDt = evalAux(e, i); //Valeur de l'opérande droit. i++; //On passe la parenthèse fermante. switch { case '+': return valOpGche + valOpDt; case '-': return valOpGche - valOpDt; case '*': return valOpGche * valOpDt; default: return valOpGche / valOpDt; } } else //e[i] != '(', donc la sous-expression est un nombre. { int val = 0; for val = 10 * val + e[i] - '0'; return val; } } //Evalue l'expression donnée dans la chaîne e. int { int i = 0; return evalAux(e, i); } int{ char e[100]; cin >> e; cout << eval(e) << endl; return 0 ; } |

