L'évaluation des expressions arithmétiques de chaîne en C++
Je suis à la recherche d'un moyen simple pour évaluer un calcul simple expression à partir d'une chaîne de caractères, comme ceci:
3*2+4*1+(4+9)*6
Je veux juste +
et *
opérations plus (
et )
signes. Et *
a plus de priorité que +
.
- double possible de Quel est le meilleur moyen pour évaluer l'expression mathématique en C++?
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes à la recherche d'un simple récursif de la descente de l'analyseur.
Voici un exemple très simple:
On peut essayer : http://partow.net/programming/exprtk/index.html
exprtk
est vraiment puissant et simple, la peine d'essayer d'abord!Juste pour ajouter une autre variante, envisager d'essayer TinyExpr pour ce problème. Il est open source et de l'auto-contenue dans un fichier de code source. Il est écrit en C, mais il va compiler proprement en C++ dans mon expérience.
La résolution de votre exemple de l'expression à partir de ci-dessus est aussi simple que:
Lors de la recherche d'une bibliothèque pour une tâche similaire, j'ai trouvé libmatheval. Semble être une bonne chose. Malheureusement, GPL, ce qui est inacceptable pour moi.
J'ai écrit un très simple évaluateur d'expression en C# (un minimum de changements nécessaires pour le faire en C++compatible). Il est basé sur l'expression de l'arbre méthode de construction, seulement que l'arbre n'est pas réellement construit, mais tous les nœuds sont évalués sur place.
Vous pouvez le trouver à cette adresse: Un Simple Calcul Arithmétique Évaluateur D'Expression
Si j'étais à la recherche d'une réponse à cette question. Et j'ai essayé de créer mon propre langage de programmation. Pour les expressions mathématiques, j'ai été dans le besoin de cette fonction.
Oke donner je vais le donner à vous. Utiliser de la manière que vous voulez.
C'est un long et probablement un unefficient façon de faire une telle tâche. Mais il obtient le travail fait pour elle. Bientôt, je suis à la planification sur l'ajout de la variable de soutien. Mais vous pouvez le faire aussi, c'est assez facile (je suppose :P).
EDIT: je viens de réorganisation de la fonction maintenant il fonctionne comme par magie XD..