【问题标题】:Char to Operator C++字符到运算符 C++
【发布时间】:2012-10-30 15:26:05
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 附上地图,cout &lt;&lt; operators[op](6, 1);
  • 如果您想保留6 op 1 语法,那么不,这是不可能的。
  • 想想编译指令和运行时数据。

标签: c++ char operators


【解决方案1】:

简单的方法是使用switch语句

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

【讨论】:

    【解决方案2】:

    我不认为有办法像你写的那样,但你可以做一些像 hacky 这样的事情

    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")
        }
     }
    

    【讨论】:

    • 有效的建议,但这远非 hacky。
    • 嗯,不,但我觉得它并没有真正触及 OP 问题的根源。
    • 是的,我认为交换机是可行的方法,但认为可能有更简单的方法。
    • 您也许还可以使用自定义流类做一些事情,但这很快就会变得一团糟。
    【解决方案3】:

    你可以使用老式的#define:

    #define op +
    std::cout << 6 op 1;
    

    但它的用途有限。

    如果您想在纯 C++ 中执行此操作,则必须显式或在外部库(如 tetzfamily.com/temp/EvalDoc.htm 或 codeproject.com/Articles/7939/C-based -表达式-评估-库))。

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

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

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

    【讨论】:

      【解决方案4】:
      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;
      
      
      }
      

      }

      【讨论】:

      • 这涵盖了所有算术运算。
      猜你喜欢
      • 1970-01-01
      • 2014-02-27
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多