#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;}