2016-09-28 25 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

已解決。我的教授編寫了^ = 3的isp和^ = 3的icp,而當我將isp更改爲4時,它開始工作。我會和我的教授一起討論這個問題。