2012-10-30 5 views
5

ちょっと、文字「+」を演算子に変換する方法を知りたかったのです。例えば私が持っていた場合オペレータC++への文字

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

ありがとう。

+3

;' – chris

+1

あなたは '6 OP 1 '構文を維持したい場合は、いいえ、それは不可能です。 –

+0

コンパイルされた命令と実行時データについて考えます。 –

答えて

6

簡単な方法は、switchステートメントを使用することです

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

私はあなたがそこに書いているような方法はないと思うが、あなたは

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

有効な提案、これはハッキーから遠いです。 –

+0

いいえ、私は実際にOPの質問の根拠には達していないと感じています。 – Dan

+0

さて、私はスイッチが行く方法だと思ったが、もっと簡単な方法があるかもしれないと思った。 – wzsun

0

あなたがかもしれないようなハック何かができます旧式の#defineを使用してください:

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

ただし、使用が制限されています。

純粋なC++でこれを行うには、スイッチ構文を明示的に使用するか、外部ライブラリ(tetzfamily.com/temp/EvalDoc.htmやcodeproject.com/Articles/7939/C- based-Expression-Evaluation-Library)を参照)。

もう一つの方法は、BCのように、外部プログラムを使用することです:あなたは、後で結果を使用したい場合は、popen機能やC++ equivalentをチェック

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

。マップ、 `coutの<<演算子[OP](6、1)で

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; 


} 

}

+0

これはすべての算術演算を対象としています。 – user2722684