C++ 迪克斯特拉';C+中的s调车场算法+;

C++ 迪克斯特拉';C+中的s调车场算法+;,c++,rpn,shunting-yard,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&

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

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;
}
void dijkstra(字符串和s)
{
int i,j=s.size();
堆叠znaki;
字符串输出=”;
字符串znak;

对于(i=0;i47&&int(s[i]),您知道您可以比较字符文本而不是它们的ASCII值,例如
s[i]=='*'
。将使您的代码更具可读性。而且您确实了解诸如?之类的函数,请用ASCII或字符文字(如“0”、“1”)替换幻数(如47、48等)。这将使您的程序更易于阅读、调试和更健壮。使用调试器时,哪一行导致了问题?如果dded打印语句,哪一行导致问题?