【发布时间】:2015-09-13 18:27:03
【问题描述】:
我目前正在做一个项目,使用单链表形式的堆栈从后缀转换为中缀。我已经设法将ab+ 等表达式转换为(a+b),但是当表达式变得更长时,例如ab+cd*-。它不起作用。我正在考虑将先前转换的表达式推回堆栈,但是堆栈的类型是 char 并且表达式是字符串,当我尝试将其推回时它会抱怨。我应该把它做成一个模板吗?如果是,我该怎么做,或者还有其他方法可以解决这个问题。
这是我的代码:
#include "stack.h"
void convert(string expression){
stack c;
string post = " ";
string rightop = "";
string leftop = "";
string op = "";
for (int i = 0; i <= expression.length(); i++){
c.push(expression[i]);
c.print();
if (expression[i] == '*' ||
expression[i] == '+' ||
expression[i] == '-' ||
expression[i] == '/'){
cout << c.top() << endl;
leftop = c.top();
cout << leftop << endl;
c.pop();
rightop = c.top();
cout << rightop << endl;
c.pop();
op = c.top();
cout << op << endl;
//c.pop();
post = "(" + leftop + " " + op + " " + rightop + ")";
cout << post << endl;
}
//c.push(post);
}
}
int main(){
string expression;
cout << " Enter a Post Fix expression: ";
getline(cin, expression);
convert(expression);
return 0;
}
【问题讨论】:
-
由于要将整个表达式转换为中缀表示法,因此您的堆栈必须能够保存整个表达式,而不仅仅是字符。也就是说,无论何时解析表达式,都必须将其压入堆栈。您可以一次将整个表达式推入一个字符,前提是您用括号将它们分隔,但是您会遇到计算左括号等的复杂情况
标签: c++ linked-list stack postfix-notation infix-notation