使用括号将前缀转换为中缀

时间:2016-05-04 22:03:36

标签: c++ prefix parentheses infix-notation

我试图在c ++中实现一个递归程序将前缀转换为中缀(前缀包括括号),我不知道如何处理括号。 我将欣赏如何处理括号? 这就是我到目前为止所做的。输入应该是这样的:

(= 0 (+ (* 2 (* var_1 var_1)) (* (-4) var_1) 2))

,输出必须是:

(0=(2*(var_1*var_1))-(4*(var_1))+2)

相反,我的程序打印出这个:

(0=((2*(var_1*var_1))+(4*(var_1-2))))

到目前为止我编写的代码:

int main()
{
    vector<string> VecSplited_str;
    string InputPrefx_str= ReadInputFile();
    VecSplited_str=split((char*)InputPrefx_str.c_str());
    InputPrefx_str.clear();
    EvalPrefix_exp(VecSplited_str);
}

void Convert_PrefixToInfix(stack * Stk_Pointer) {

try
{
    if ( !Stk_Pointer->empty() )
    {
        std::string token = Stk_Pointer->top();
        Stk_Pointer->pop();
        replace(token.begin(), token.end(), ')', ' ');
        replace(token.begin(), token.end(), '(', ' ');
        token=trim(token);
        if (isOperator(token))
        {
            std::cout << "(";
            CalcInfixExp_str+="(";
            Convert_PrefixToInfix( Stk_Pointer );
            std::cout << token;
            CalcInfixExp_str+=token;
            Convert_PrefixToInfix( Stk_Pointer );
            std::cout << ")";
            CalcInfixExp_str+=")";
        }
        else if(isspace(token))
        {
            Convert_PrefixToInfix( Stk_Pointer );
        }
        else
        {
            std::cout << token;
            CalcInfixExp_str+=token;
            if ( !Stk_Pointer->empty() )
            {
                if(!isspace(Stk_Pointer->top()))
                    Convert_PrefixToInfix( Stk_Pointer );
            }
        }
    }
}
catch(exception ex)
{}

}

0 个答案:

没有答案