Dijkstra算法' s在C ++中的Shunting Yard算法

时间:2014-03-16 15:33:02

标签: c++ rpn shunting-yard

作为我的作业,我必须编写一个程序来计算以字符串形式给出的等式。程序的一部分是将中缀表达式解析为后缀的函数。这是我的代码:

void dijkstra(string& s)
{
    int i,j=s.size();
    stack < char > znaki;
    string output=" ";
    string znak;
    for(i=0; i<j;++i)
    {
        if((int(s[i])>47&&int(s[i])<58)||s[i]=='.')
        {
            output+=s[i];
        }
        else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
        {   
            output+=" ";
            if(znaki.empty())
            {
            }
            else
            {

                if((s[i]=='+'||s[i]=='-'))
                {
                    znak=znaki.top();
                    znaki.pop();
                    output+=znak;
                }
                else if(s[i]=='*')
                {
                    if(znaki.top()=='*'||znaki.top()=='/')
                    {


                        znak=znaki.top();
                        znaki.pop();
                        output+=znak;

                    }
                }
                else if(s[i]=='/')
                {
                    if(znaki.top()=='*'||znaki.top()=='/')
                    {

                        znak=znaki.top();
                        znaki.pop();
                        output+=znak;

                    }
                }
            }
            znaki.push(s[i]);

        }
        else if(int(s[i])=='(')
        {
            znaki.push(s[i]);
        }
        else if(int(s[i])==')')
        {
            while(znaki.top()!='(')
            {
                output+=znaki.top();
                znaki.pop();
            }
            znaki.pop();
        }
    }
    while(znaki.empty()!=true)
    {
        output+=znaki.top();
        znaki.pop();
    }
    s=output;
}

问题是它适用于除4/6等方程式之外的所有条件。有任何想法吗?我刚刚提出了要求的更新

0 个答案:

没有答案