sachant que mon code m'affiche a la fin:
je voudrais obtenir le resultat de cette operation qui est 20
Code : Sélectionner tout - Visualiser dans une fenêtre à part cout<<"8 * 5 / 2";
sachant que mon code m'affiche a la fin:
je voudrais obtenir le resultat de cette operation qui est 20
Code : Sélectionner tout - Visualiser dans une fenêtre à part cout<<"8 * 5 / 2";
Dire bonjour, c'est bien aussi.
Ce que tu veux faire n'est pas une mince affaire, il faut analyser (parser) la chaîne, en extraire les informations, décider des priorités des opérateurs toi-même… bref, il faut tout faire, le C++ n'offrant rien en natif pour cela.
Regarde Boost.Spirit pour générer un parser : http://www.boost.org/doc/libs/1_36_0...sic/index.html
Il y a même un exemple de calculatrice tout fait.
Sinon, si tu as envie de faire quelque chose de moche, pas du tout portable, à la limite de l'inutilisable, tu peux faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int main() { std::string s("8 * 5 / 2"); system(("expr " + s + " >> tmp").c_str()); std::ifstream tmp("tmp"); int res; tmp >> res; tmp.close(); system("rm tmp"); std::cout << s << " =" << res << std::endl; return 0; }![]()
Effectivement, je n'avais pas pensé à cette solution !
Plus sérieusement, je pense qu'ici il vaut mieux s'orienter vers la construction d'un arbre. Une pile, ça marche bien quand le calcul est en notation polonaise ; là, ça va être compliqué de prendre en compte la priorité des opérateurs.
S'il n'y a pas de parenthèses, on peut même faire plus simple, avec un petit algorithme récursif. Comme j'ai l'impression que c'est un exercice, je ne donnerais pas l'algorithme directement, mais essaye de réfléchir à comment toi tu ferais pour calculer en lisant la chaîne de gauche à droite. Une fois que tu auras compris comment tu effectues le calcul dans ta tête, ce sera facile de reproduire l'algorithme en C++.
Merci pour les reponses.
vous avez raison, ce n'est pas faisable, alors j'ai penser a quelquechose d'autre plus simple que j'ai ameliorer dans mon code:
je voudrais obtenir le produit 2*4*8 et la mettre dans total, sachant que la variable n peut contenir plus de trois chiffres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double total; double n = 248;
Uhm c'est pas très sûr comme résultat: http://www.flickr.com/photos/aprilyahoo/2797890451/
Voilà un lien qui t'explique l'analyse lexicale et syntaxique: http://fastnet.univ-brest.fr/~gire/C..._IUP/POLY.html
Sinon la solution d'embarquer l'interpréteur python est un bon choix si tu veux faire ça rapidement.
Partager