2016-09-28 29 views
-3

Ich habe eine Funktion, die Infix-Ausdrücke übernimmt und in Präfix-Ausdrücke konvertiert. Hier ist mein Code:Infix an Präfix funktioniert, aber nicht für Power (Caret) -Funktionsausdrücke?

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; 
} 

Diese Funktion hat gut mit den Beispielausdrücken funktioniert, die mein Professor möchte ich verwenden; "3-4-5" ergibt "-345" und "5 * (4/2)" ergibt "* 5/42". Dies funktioniert jedoch nicht mit dem Ausdruck "3^4^5". Es gibt mir immer "^^ 345", wo es "^ 3^45" sein soll.

Ist mein Algorithmus falsch? Oder könnte das etwas mit ICP und ISP zu tun haben (in dem Code, den sie mir gegeben hat, haben beide "^" = 3.)?

+2

Es ist wahrscheinlich etwas mit Mächten zu tun, die von rechts nach links und die anderen von links nach rechts bewerten. Aber ich habe nicht untersucht, was Ihr Code tut, um es zu verstehen. Ich habe auch keine Präfix-Operator-Notationen verwendet. –

+1

Das von Ihnen angegebene Codebeispiel ist unvollständig. Keine Definition für "isp" oder "isOperand", was definitiv das Verständnis für Ihr Programm verdeckt. Bedenken Sie auch die Einrückung und die allgemeine Lesbarkeit. Erinnern Sie sich daran, dass Sie die Leute bitten, Ihnen in ihrer Freizeit zu helfen. –

+0

Was sind ISP und ICP und wo sind diese Funktionen? – EJP

Antwort

-2

Gelöst. Mein Professor hatte codiert, dass die ISP von^= 3 und icp von^= 3, während wenn ich die ISP zu 4 änderte es begann zu arbeiten. Ich werde das mit meinem Professor aufnehmen.

Verwandte Themen