将字符转换为运算符C++

7

嘿,我想知道如何将字符 "+" 转换为运算符。例如,如果我有

char op = '+'
cout << 6 op 1;

谢谢。

5
用一张地图,执行 cout << operators[op](6, 1); - chris
1
如果你想保留 6 op 1 语法的话,那么不,这是不可能的。 - Nikos C.
考虑编译指令和运行时数据。 - Kerrek SB
4个回答

10

使用switch语句是一种简单的方法。

switch (op)
{
case '+':
  res = x + y;
  break;
case '-':
  res = x - y;
  break;
case '*':
  res = x * y;
  break;
}

4
我认为按照你所写的方式是没有办法实现的,但你可以采用一些巧妙的方法,比如:
int do_op(char op, int a, int b)
{
    switch(op)
    {
    case '+':
       return a+b;
    break;
    case '-':
       return a-b;
    break;
    case '*':
       return a*b;
    break;
    case '/':
       return a/b;
    break;
    default:
        throw std::runtime_error("unknown op")
    }
 }

6
有效的建议,但这远非hacky。 - Luchian Grigore
不是的,但我觉得它并没有真正解决 OP 的问题根源。 - Dan
是的,我想开关可能是最好的选择,但我认为可能有更简单的方法。 - wzsun
你可能也可以使用自定义流类来完成某些操作,但这样很快就会变得混乱不堪。 - Dan

0
public class ArithmeticOps {

   static int testcase11 = 11;
   static int testcase12 = 3;
   static char testcase13 = '/';

   public static void main(String args[]){
        ArithmeticOps testInstance = new ArithmeticOps();
        int result = testInstance.compute(testcase11,testcase12,testcase13);
        System.out.println(result);
   } 


public int compute(int a, int b,char operator){
    int i=0;
    switch(operator)
    {

    case '+' :
        i= a+b;
        break;
    case '-' :
        i= a-b;
        break;
    case '*' :
        i= a*b;
        break;
    case '/' :
        i= a/b;
        break;
    case '%' :
        i= a%b;
        break;
    case '^' :
        i= a^b;
        break;
    default:
        i=0;
    }
    return i;


}

}


这包括所有算术运算。 - user2722684

0
您可以使用旧式的 #define:
#define op +
std::cout << 6 op 1;

然而它的使用是有限的。

如果你想要在纯C++中实现这个功能,你需要使用switch语法,不管是明确地还是通过外部库(比如tetzfamily.com/temp/EvalDoc.htm或者codeproject.com/Articles/7939/C-based-Expression-Evaluation-Library)。

另一种方法是使用一个外部程序,比如bc:

char op = '+';
std::string s;
s += "6";
s += op;
s += "4";
system(("echo " + s + "|bc").c_str());

如果您想稍后使用结果,请检查popen函数或C++等效函数

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接