# include <iostream>
# include <stack>
# include <string>
# include <cstdlib>
int priority(char);
int priority(char c)
{
if(c == '*'|| c == '/') return 2;
if(c == '+'|| c == '-') return 1;
if(c == '(') return 0;
}
using namespace std;
int main()
{
stack <char> stack;
string infix = "(2*3+7/8)*(5-1)";
char temp;
for(int i = 0; i < infix.length(); i++)
{
switch(infix[i])
{
case '(' :stack.push(infix[i]);break;
case ')' : do
{
temp = stack.top();
stack.pop();
if(temp != '(') cout << temp;
}
while(temp != '(');break;
case '*' : if((!stack.empty()) && priority(infix[i]) <= priority(stack.top())) {cout << stack.top();stack.pop();}
stack.push(infix[i]);break;
case '/' : if((!stack.empty()) && priority(infix[i]) <= priority(stack.top())) {cout << stack.top();stack.pop();}
stack.push(infix[i]);break;
case '+' : if((!stack.empty()) && priority(infix[i]) <= priority(stack.top())) {cout << stack.top();stack.pop();}
stack.push(infix[i]);break;
case '-' : if((!stack.empty()) && priority(infix[i]) <= priority(stack.top())) {cout << stack.top();stack.pop();}
stack.push(infix[i]);break;
default : cout << infix[i];break;
}
}
while(!stack.empty())
{
cout << stack.top();
stack.pop();
}
system("pause");
return 0;
}
Khi em đổi if((!stack.empty()) && priority(infix[i]) <= priority(stack.top())) thành if(priority(infix[i]) <= priority(stack.top()) && !stack.empty()) lại bị lỗi