我有一个函数,它接受中缀表达式并将它们转换为前缀表达式。这是我的代码:
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。)?