代码问题 DS栈—波兰式,逆波兰式

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果

 DS栈—波兰式,逆波兰式 这样对吗?
#include
#include
using namespace std;


int panduan(char a)
{
    switch (a)
    {
    case'#':
    case'&':
        return -1;//终止运算符
    case'+':
    case'-':
        return 1;//一级运算符
    case'*':
    case'/':
        return 2;//2级运算符
    case'(':
    case')':
        return 3;//3级
    default:
        return 0;//数字
    

    }
}
void sun(stack  s)
{
    string temple="?";
    string  s1[20];//数字 运算符
    stack   s2;//运算符
    int t = 0;
    while (!s.empty())
    {
        int flage = panduan(s.top());
        if (flage == 0)//数字
        {
            s1[t] = (s.top());//存在左边
            s.pop();
            if (panduan(s.top()) == 0)//下一个为数字
            {
                s1[t] = s1[t] + s.top();
                s.pop();
                t++;
            }
            else 
            {
                t++;
            }


        }
       
        else if (flage == 1)//一级运算符+-
        {
            if (s2.empty())
            {
                s2.push(s.top());
                s.pop();
            }
            else if (s2.top() == '*' || s2.top() == '/'|| s2.top() == '+' || s2.top() == '-')//前一个数上级的 或同级
            {
                t--; t--;
                s1[t] = s2.top() + temple + s1[t] + temple + s1[t + 1];//将运算符穿起来
                s2.pop();
                t++; 
                s1[t] = ' ';

            }
            else
            {
                s2.push(s.top());//压入s2的值
                s.pop();
            }
            
        }
        else if (flage == 2)//二级运算符*/
        {
            if (s2.top() == '-' || s2.top() ==  '+'|| s2.top()=='('||s2.empty())//前一个数下级的 或空
            {
                s2.push(s.top()); s.pop();
                
            }
            else if (s2.top() == '*' || s2.top() == '/')
            {
                t--; t--;
                s1[t] = s2.top() + temple + s1[t] + temple + s1[t + 1];//将运算符穿起来
                s2.pop();
                s1[t++] = ' ';
                //s2.push(s.top());//压入s2的值
            }

            
        }
        else if (flage == 3)//3运算符 )
        {
            if (s.top() == ')')
            {
                if (s2.top() == '+' || s2.top() == '-'||s2.top() == '*' || s2.top() == '/')
                {
                    t--; t--;
                    s1[t] = s2.top() + temple + s1[t] + temple + s1[t + 1];//将运算符穿起来
                    s2.pop();
                    s1[++t] = ' ';
                    //s2.push(s.top());//压入s2的值
                }
                else if (s2.top() == '(')
                {
                    s2.pop(); s.pop();

                }

            }
            else
            {
                if(s.top() == '(')
                {
                    s2.push(s.top()); s.pop();
                }
            }
        }
        else if (flage==-1)
        {
            t--; t--;
            s1[t] = s2.top() + temple + s1[t] + temple + s1[t + 1];//将运算符穿起来
            s2.pop();
            
            s1[++t] = ' ';

            s.pop();

        }

    }
    string a = s1[0];
    int longt = a.length();
    for (int i=0; i < longt; i++)
    {
        if (a[i]=='?')
        {
            cout << ' ';
        }
        else
        {
            cout << a[i];
        }
        
    }
    
    
    
}




void xia(stack  s)
{
   
    
        string temple = "?";
        string  s1[20];//数字 运算符
        stack   s2;//运算符
        int t = 0;
        while (!s.empty())
        {
            int flage = panduan(s.top());
            if (flage == 0)//数字
            {
                s1[t] = (s.top());//存在左边
                s.pop();
                if (panduan(s.top()) == 0)//下一个为数字
                {
                    s1[t] = s1[t] + s.top();
                    s.pop();
                    t++;
                }
                else
                {
                    t++;
                }


            }

            else if (flage == 1)//一级运算符+-
            {
                if (s2.empty())
                {
                    s2.push(s.top());
                    s.pop();
                }
                else if (s2.top() == '*' || s2.top() == '/' || s2.top() == '+' || s2.top() == '-')//前一个数上级的 或同级
                {
                    t--; t--;
                    s1[t] =  s1[t] + temple + s1[t + 1]+temple+  s2.top() + temple;//将运算符穿起来
                    s2.pop();
                    t++;
                    s1[t] = ' ';

                }
                else
                {
                    s2.push(s.top());//压入s2的值
                    s.pop();
                }

            }
            else if (flage == 2)//二级运算符*/
            {
                if (s2.top() == '-' || s2.top() == '+' || s2.top() == '(' || s2.empty())//前一个数下级的 或空
                {
                    s2.push(s.top()); s.pop();

                }
                else if (s2.top() == '*' || s2.top() == '/')
                {
                    t--; t--;
                    s1[t] = s1[t] + temple + s1[t + 1] + temple + s2.top() + temple;//将运算符穿起来
                    s2.pop();
                    s1[t++] = ' ';
                    //s2.push(s.top());//压入s2的值
                }


            }
            else if (flage == 3)//3运算符 )
            {
                if (s.top() == ')')
                {
                    if (s2.top() == '+' || s2.top() == '-' || s2.top() == '*' || s2.top() == '/')
                    {
                        t--; t--;
                        s1[t] = s1[t] + temple + s1[t + 1] + temple + s2.top() + temple;//将运算符穿起来
                        s2.pop();
                        s1[++t] = ' ';
                        //s2.push(s.top());//压入s2的值
                    }
                    else if (s2.top() == '(')
                    {
                        s2.pop(); s.pop();

                    }

                }
                else
                {
                    if (s.top() == '(')
                    {
                        s2.push(s.top()); s.pop();
                    }
                }
            }
            else if (flage == -1)
            {
                t--; t--;
                s1[t] = s1[t] + temple + s1[t + 1]+ temple +  s2.top() + temple;//将运算符穿起来
                s2.pop();

                s1[++t] = ' ';

                s.pop();

            }

        }
        string a = s1[0];
        int longt = a.length();
        for (int i = 0; i < longt; i++)
        {
            if (a[i] == '?')
            {
                cout << ' ';
            }
            else
            {
                cout << a[i];
            }

        }



    
}
















int main()
{
    
    int T;
    cin >> T;
    
    while (T--)
    {
        string a;
        stack   s;
        cin >> a;
        int len_a = 0;
        len_a = a.length();
        s.push('&');
        s.push('#');
        while (len_a--)
        {
            s.push(a[len_a]);
        }


        sun(s);
        cout << endl;
        xia(s);
        cout << endl;
        
        
        cout << endl;
    }
    

    return 0;
}