2016-09-28 2 views
-3

私は中置式を受け取り、接頭辞式に変換する関数を持っています。ここに私のコードがあります:接頭辞はプレフィックスには作用しますが、力(キャレット)関数式には作用しませんか?

string infixToPrefix(string expression) 
{ 

    stack<char> S; //holds operators 
    stack<char>output; //display like in class 
    string prefix = ""; 
    char ch; 
    S.push('#'); 

    for (int i = expression.length(); i > 0; i--){ 

    ch = expression[i]; 

    if (isOperand(ch) == true){ 
     output.push(ch); 

    } 
    else { 
     if (ch == '('){ 
     while (S.top() != ')'){ 
      output.push(S.top()); 
      S.pop(); 
     } 
     } 

     else { 
     while (isp(S.top()) > icp(ch)){ 

      output.push(S.top()); 
      S.pop(); 

     } 
     S.push(ch); 

     } 
    } 
    } 

    while (S.top() != '#'){ 
     output.push(S.top()); 
     S.pop(); 

    } 

    while (!output.empty()){ 
    if (output.top() == ')'){ 
     output.pop(); 
    } 
    else{ 
    prefix.append(1,output.top()); 
    output.pop(); 
    } 
    } 
    return prefix; 
} 

この機能は私の教授が私に使いたいと思っていたサンプルの表現とうまくいっています。 「3-4-5」は「--345」となり、「5 *(4/2)」は「* 5/42」となる。ただし、これは "3^4^5"という式では機能しません。それは私に "^^ 345"を与え続けています。 "^ 3^45"であるはずです。

私のアルゴリズムは間違っていますか?あるいは、これはICPとISPと何か関係がありますか(私が与えたコードでは、どちらも "^" = 3です)?

+2

右から左を評価する力と左から右を評価する他の評価関数とは関係がありそうです。しかし、私はあなたのコードがそれを理解するために何をしているのか見ていません。前に接頭辞演算子の表記を使用していません。 –

+1

指定したコードサンプルは不完全です。 isp'や 'isOperand'の定義がないため、あなたのプログラムの理解がはっきりしません。また、インデントと一般的な可読性を気にしてください。彼らがあなたの苦しみの時間にあなたを助けるように人々に求めていることを忘れないでください。 –

+0

ISPとICPとは何ですか?また、これらの機能はどこにありますか? – EJP

答えて

-2

解決済み。私の教授は、ispを^ = 3とicp =^3とコード化していましたが、私がispを4に変更したときに動作しました。私はこれを私の教授と一緒に取る。

関連する問題