我试图在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)
{}
}