2015-11-27 4 views
-3

Моя проблема в том, что мое текущее приложение, над которым я работаю, должно добавить int в другой int с символом.Evaluate int, char и int

Код может объяснить это лучше.

const char operatorArray[3] = {'+', '-', 'x'}; 
int randOperator = rand() % 3; 
char Operator = operatorArray[randOperator]; 

int a = 1; 
int b = 2; 

Итак, у меня есть оператор (оператор), который является символом char, и двумя числами, которые являются целыми числами.

Я вроде хочу (оператор b), например, как 1 + 2 и тоже поставил этот ответ в переменной.

+0

насчет 'если (оператор == '+') {возвращают + Ь;}'? – user463035818

ответ

0

Использование switch заявления представляется целесообразным:

int c; 

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

Вы должны определить, где биты коды определения того, что делают ваши операторы. К счастью, C++ 11 помогает вам в этом:

#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 с g++ -std=c++11 -Wall -Wextra -Werror main.cpp.

Выход:

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