将char转换为算术运算符

时间:2016-01-22 10:10:44

标签: c++ char

我有一个操作员的字符表,总共有四个操作符(+ - * /)。

我是怎么做的:

int Compute(char c, int a, int b)
{
    if(c == '+')  
        return a+b;
    else if(c == '-')     
        return a-b;
    else if(c == '*')
        return a*b;
    else (c == '/')
        return a/b;
}

有更方便的方法吗?

3 个答案:

答案 0 :(得分:4)

您可以使用switch语句:

int Compute(char c, int a, int b)
{
    switch (c) {  
    case '+': return a+b;
    case '-': return a-b;
    case '*': return a*b;
    case '/': return a/b;
    default: throw std::runtime_error("No such operator");
    }
}

答案 1 :(得分:0)

首先是语法

else (a == '/')
    return a/b;

错了,应该是

else if (a == '/')
    return a/b;

其次,您的a参数只能使用4个离散值,因此良好的做法是使用枚举,例如

enum Operation
{
    kAddition,
    kSubtraction,
    kMultiplication,
    kDivision
};

int Compute(Operation a, int a, int b)
{
    if (a == kAddition)  
        return a+b;
    else if (a == kSubtraction)     
        return a-b;
    else if (a == kMultiplication)
        return a*b;
    else if (a == kDivision)
        return a/b;
}

确保Compute的用户仅使用这四个值中的一个作为操作(a)参数。

我可能没有在我的示例中使用过最佳做法,因此我建议您阅读this answer以获取更多详细信息。

最后,您可以使用switch语句使代码更简洁:

enum Operation
{
    kAddition,
    kSubtraction,
    kMultiplication,
    kDivision
};

int Compute(Operation a, int a, int b)
{
    switch (a)
    {
        case kAddition:
            return a+b;
        case kSubtraction:
            return a-b;
        case kMultiplication:
            return a*b;
        case kDivision:
            return a/b;
    }
}

答案 2 :(得分:0)

int ComputeByChar(char a, int c, int b)
{ 
    switch(a)
    {
    case '+': return c+b; 
    case '-': return c-b;
    case '/': return c/b;
    case '*': return c*b;
    default: cout<< "Invalid";
        break;
    }
    return 0;
}