【问题标题】:Evaluate an int, char and int计算一个 int、char 和 int
【发布时间】:2015-11-27 13:19:46
【问题描述】:

我的问题是我正在处理的当前应用程序需要将一个 int 添加到另一个带有 char 的 int。

代码可以更好的解释。

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

int a = 1;
int b = 2;

所以这里我有一个运算符(Operator),它是一个字符,还有两个整数。

我有点想要(a 运算符 b),例如 1+2,并且也将答案放入变量中。

【问题讨论】:

  • if (Operator == '+') {return a+b;} 呢?

标签: c++ char int addition subtraction


【解决方案1】:

使用switch 声明似乎合适:

int c;

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

【讨论】:

    【解决方案2】:

    你必须在某处定义一些代码来定义你的操作员做什么。幸运的是,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;
    }
    

    g++ -std=c++11 -Wall -Wextra -Werror main.cpp编译。

    输出:

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

    【讨论】:

      猜你喜欢
      • 2020-01-27
      • 2020-11-03
      • 2013-07-30
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多