#include
<
iostream
>
#include < stack >
using namespace std;
int pri( char optr)
... {
switch (optr)
...{
case '=': return 0;
case '^': return 3;
case '*': return 2;
case '/': return 2;
case '%': return 2;
case '+': return 1;
case '-': return 1;
default: return 0;
}
}
int main()
... {
stack<char>s;
s.push('#');
char ch;
char top;
cout<<"请输入中缀表达式以'#'结束:";
while(cin.get(ch) && ch != '#')
...{
/**//*
**如果是数字或者字符直接输出
*/
if(isdigit(ch)||isalpha(ch))
cout<<ch;
/**//*
**如果是空格就跳过
*/
else if( isspace(ch) )
;
else
...{
/**//*
**如果是'('直接压入栈
*/
if( ch == '(')
s.push(ch);
/**//*
**如果是')',那么将栈元素弹出,将符号写出直到遇到一个对应的
**左括号,但是这个左括号只被弹出并不输出
*/
else if( ch == ')')
...{
top = s.top();
s.pop();
while( top != '(' && !s.empty())
...{
cout<<top;
top = s.top();
s.pop();
}
}
/**//*
**如果见到任何其他的符号("+","*"),那么从栈中弹出栈元素直到发现
**优先级更低的元素为止。
*/
else
...{
top = s.top();
s.pop();
while(pri(top)>=pri(ch)&&top != '(')
...{
cout<<top;
top=s.top();
s.pop();
}
s.push(top);
s.push(ch);
}
}
}
top = s.top();
s.pop();
while(!s.empty() && top != '#')
...{
cout<<top;
top=s.top();
s.pop();
}
cout<<endl;
return 0;
}
#include < stack >
using namespace std;
int pri( char optr)
... {
switch (optr)
...{
case '=': return 0;
case '^': return 3;
case '*': return 2;
case '/': return 2;
case '%': return 2;
case '+': return 1;
case '-': return 1;
default: return 0;
}
}
int main()
... {
stack<char>s;
s.push('#');
char ch;
char top;
cout<<"请输入中缀表达式以'#'结束:";
while(cin.get(ch) && ch != '#')
...{
/**//*
**如果是数字或者字符直接输出
*/
if(isdigit(ch)||isalpha(ch))
cout<<ch;
/**//*
**如果是空格就跳过
*/
else if( isspace(ch) )
;
else
...{
/**//*
**如果是'('直接压入栈
*/
if( ch == '(')
s.push(ch);
/**//*
**如果是')',那么将栈元素弹出,将符号写出直到遇到一个对应的
**左括号,但是这个左括号只被弹出并不输出
*/
else if( ch == ')')
...{
top = s.top();
s.pop();
while( top != '(' && !s.empty())
...{
cout<<top;
top = s.top();
s.pop();
}
}
/**//*
**如果见到任何其他的符号("+","*"),那么从栈中弹出栈元素直到发现
**优先级更低的元素为止。
*/
else
...{
top = s.top();
s.pop();
while(pri(top)>=pri(ch)&&top != '(')
...{
cout<<top;
top=s.top();
s.pop();
}
s.push(top);
s.push(ch);
}
}
}
top = s.top();
s.pop();
while(!s.empty() && top != '#')
...{
cout<<top;
top=s.top();
s.pop();
}
cout<<endl;
return 0;
}