其中遇到了很多问题,贴一下代码吧!

/*
   中缀表达式转化规则:
   从左到右遍历中缀表达式的每个数字和符号,
   若是数字就输出,即成为后缀表达式的一部分;
   若是符号,则判断其与栈顶符号的优先级,
   是右括号或优先级低于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,
   并将当前符号进栈,一直到最终输出后缀表达式为止。
*/
#include <iostream>
#include <stack>
#include <stdio.h>
using namespace std;
int prior(char c)                        //数字越大,表示优先级越高;
{
    if(c == '#')
        return 1;
    if(c == '(')
        return 2;
    //if(c == ')' || c == '(')
     //   return 2;
    if(c == '+' || c == '-')
        return 3;
    if(c == '*' || c == '/')
        return 4;
}
int main()
{
    char c;
    stack <char> op;
    op.push('#');                                            //这样做可以方便后面的处理,不然对于判空时不是很好处理;
    while(scanf("%c",&c),c)
    {
        if(c >= 'a'&& c <= 'z')
            cout << c;
        else if(c == ')')
        {
            while(op.top() != '(')
            {
                cout << op.top();
                op.pop();
            }
            op.pop();
        }
        else if(c == '(')
            op.push(c);
        else if(c == '#')                                   //遇到'#'后将栈中的元素全部输出;
        {
            while(op.top() != '#')
            {
                cout << op.top();
                op.pop();
            }
            return 0;
        }
        else
        {
            while(prior(c) <= prior(op.top()))               //若优先级低于栈顶符号,则栈顶元素出栈;反之,则入栈;
            {
                cout << op.top();                            //首先输出栈顶元素,然后再弹出;
                op.pop();
            }
            op.push(c);
        }
    }
    return 0;
}
//从这个程序中遇到了很多问题,比如结束,如果是判断栈空,怎么解决不是因为刚刚开始就是空的,然后就结束呢?
//然后想到的方法就是先将'#'压入堆栈中,最后判断栈顶元素是不是'#'即可,最后再return 0,这样也让程序退出了,不会陷入死循环。
//还有就是对于括号的处理,调试了很多次,最后终于AC了,心情无比喜悦了!