2015-11-27 2 views
-3

Mon problème est que mon application actuelle sur laquelle je travaille doit ajouter un int à un autre int avec un caractère.Évaluer un int, char et int

Le code peut mieux l'expliquer. Donc j'ai ici un opérateur (opérateur) qui est un char, et deux nombres qui sont des nombres entiers.

Je sorte de vouloir (un opérateur b) donc comme 1 + 2 par exemple et aussi mettre cette réponse dans une variable.

+0

Qu'en est-'si (l'opérateur == '+') {return a + b;}'? – user463035818

Répondre

0

Utilisation d'une instruction switch semble appropriée:

int c; 

switch(Operator) 
{ 
case '+': 
    c = a + b; 
    break; 
case '-': 
    c = a - b; 
    break; 
case 'x': 
    c = a * b; 
    break; 
} 
0

Vous devez définir les bits de code quelque part définir ce que vos opérateurs font. Heureusement, C++ 11 vous aide à cela:

#include <iostream> 
#include <map> 
#include <functional> 

template<typename T> 
T eval(char op, T a, T b) 
{ 
    static const std::map<char, std::function<T(T, T)> > operators = { 
     { '+', [](T a, T b){return a + b; } }, 
     { '-', [](T a, T b){return a - b; } }, 
     { '/', [](T a, T b){return a/b; } }, 
    }; 
    auto it = operators.find(op); 
    return it->second(a, b); 
} 

int main() 
{ 
    std::cout << "3  + 4 = " << eval('+', 3, 4) << std::endl; 
    std::cout << "3.0  - 1.5 = " << eval('-', 3.0, 1.5) << std::endl; 
    std::cout << "(-2.f)/8.f = " << eval('/', -2.f, 8.f) << std::endl; 
    return 0; 
} 

Compile avec g++ -std=c++11 -Wall -Wextra -Werror main.cpp.

Sortie:

3  + 4 = 7 
3.0  - 1.5 = 1.5 
(-2.f)/8.f = -0.25