-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)。
這可能與評估從右到左的權力以及從左到右評估的權力有關。但是我沒有看過你的代碼是如何理解它的;我之前也沒有使用前綴運算符符號。 –
您提供的代碼示例不完整。 「isp」或「isOperand」沒有定義,這絕對掩蓋了對程序的理解。另外,不要介意縮進和一般的可讀性;記住你要求人們在他們的旅行時間幫助你。 –
什麼是ISP和ICP,以及這些功能在哪裏? – EJP