qt中缀为应用程序前缀

时间:2016-03-23 12:32:41

标签: c++ qt

我写了一个中缀代码块上的前缀代码,它工作正常,可以处理括号.. 我最近搬到了qt所以我只是将代码复制到qt。并将String更改为QString。到目前为止,它适用于案例,不使用括号, 这里用代码块写的代码函数(工作100%)

    string InfixToPrefix(string infix)
{
    stackk s;
    char ValueToPushOrPop;
    s.init(20);
    string postfix = "";
    for(int i = 0; i< infix.length(); i++)
    {
        if(IsOperand(infix[i]))
            postfix +=infix[i];

        else if(IsOperator(infix[i]))
        {
            if(!s.isempty())
            {
                while((!s.isempty())&&(s.topp()!='(') && (HasHighPrecedence(s.topp(),infix[i]))) // those line responsible for checking precedence
                {
                    postfix+=s.topp();
                    s.pop(&ValueToPushOrPop);
                }
            }
            s.push(infix[i]);
        }
        else if(infix[i]==')')
        {
            while(!s.isempty()&&s.topp()!='(')
            {
                postfix+=s.topp();
                s.pop(&ValueToPushOrPop);
            }
            s.pop(&ValueToPushOrPop);
        }
        else if(infix[i]=='(')
            s.push(infix[i]);
    }
    while(!s.isempty())
    {
        s.pop(&ValueToPushOrPop);
        if(ValueToPushOrPop!='(')
            postfix+=ValueToPushOrPop;
    }
    return postfix;
    postfix.clear();
}

qt函数

 QString InfixToPrefix(QString infix)
{
    QStack<char> s;
    QString postfix = "";
    for(int i = 0; i< infix.length(); i++)
    {
        if(IsOperand(QString(infix).toStdString()[i]))
                postfix +=QString(infix).toStdString()[i];
        else if(IsOperator(QString(infix).toStdString()[i]))
        {
            if(!s.isEmpty())
            {
                while((!s.isEmpty())&&(s.top()!='(') && (HasHighPrecedence(s.top(),QString(infix).toStdString()[i]))) // those line responsible for checking precedence
                {
                    postfix.append(s.top());
                    s.pop();
                }
            }
            s.push(QString(infix).toStdString()[i]);
        }
        else if(QString(infix).toStdString()[i]==')')
        {
            while(!s.isEmpty()&&s.top()!='(')
            {
                postfix.append(s.top());
                s.pop();
            }
            s.pop();
        }
        else if(QString(infix).toStdString()[i]=='(')
        {
            s.push(QString(infix).toStdString()[i]);
           }
    }
    while(!s.isEmpty())
    {
        if(s.top()!='(')
        postfix.append(s.top());
        s.pop();
    }
    return postfix;

点击那里查看图片

he didn't handle the brackets

..请求回应,先谢谢。

0 个答案:

没有答案