我写了一个中缀代码块上的前缀代码,它工作正常,可以处理括号.. 我最近搬到了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;
点击那里查看图片
..请求回应,先谢谢。