我正在为我的数据结构课程做一个作业,我必须将中缀表达式转换为后缀表达式。我几乎完成了它,但是当我尝试输入类似+ b + c
的东西时,我一直收到错误它可以处理a + b和a + b * c就好了。
我真的不确定它有什么问题。如果有人可以指出我的方向或看到我的代码的问题,我会非常感激。
#include <iostream>
#include <stack>
using namespace std;
//checks priority of operators.
int priority(char e){
int pri = 0;
if(e == '*' || e == '/' || e == '%'){
pri = 2;
}else{
if(e == '+' || e == '-'){
pri = 1;
}
}
return pri;
}
void main(){
cout << "This program will convert an infix expression to a postfix expression." << endl;
cout << "Please enter your expression without any spaces." << endl;
stack<char> charStack;
char input[100];
char output[100];
char n1;
char *o;
o = &output[0];
cin >> input;
int n = 0;
while(input[n] != 0){
if(isdigit(input[n]) || isalpha(input[n])){
*o = input[n];
n++;
o++;
}
if(input[n] == '('){
charStack.push(input[n]);
n++;
}
if(input[n] == ')'){
n1 = charStack.top();
charStack.pop();
while(n1 != '('){
*o = n1;
o++;
n1 = charStack.top();
charStack.pop();
}
n++;
}
if(input[n] == '+' || input[n] == '-' || input[n] == '*' || input[n] == '/' || input[n] == '%'){
if(charStack.empty() == true){
charStack.push(input[n]);
}else{
n1 = charStack.top();
charStack.pop();
while(priority(n1) >= priority(input[n])){
*o = n1;
o++;
n1 = charStack.top();
charStack.pop();
}
charStack.push(n1);
charStack.push(input[n]);
}
n++;
}
}
while(!charStack.empty()){
*o = charStack.top();
o++;
charStack.pop();
}
*o = '\0';
cout << output << endl;
}
答案 0 :(得分:1)
查看我的评论内联。
// You can empty the stack here.
charStack.pop();
while(priority(n1) >= priority(input[n])){
...
// BUG: This line will crash if the stack is empty.
// You need to check for an empty stack.
n1 = charStack.top();
答案 1 :(得分:1)
在运算符的代码中弹出元素之前,不检查堆栈是否为空。这是问题的一部分。
顺便说一下,它应该是int main()
而不是void
,而您不需要与true
进行比较:charStack.empty() == true
与{charStack.empty()
相同1}}。