正如我在标题中提到的,我想将中缀表达式转换为前缀表达式,我知道已经有很多在线转换器和源代码可以做到这一点,但是他们的想法很相似
步骤1.反向输入字符串(中缀表达式)
第2步。将其转换为后缀表达式
第3步。反转第2步的结果(是前缀)
PS:在第一步中,需要将“(”转换为“)”,反之亦然
我用c ++实现,但是我发现如果输入没有括号(即使没有必要),它也无法取得预期的结果
例如9 / 3-4 + 2 * 5-7 * 8 =>-/ 93 + 4- * 25 * 78
但预期结果是-+-/ 934 * 25 * 78,需要输入:(((9 / 3-4)+ 2 * 5)-7 * 8)
我想知道是否有任何简单的方法可以将中缀转换为前缀(我需要使用堆栈或队列来解决此问题)?或如何在输入字符串中添加括号?
以下是我的代码的一部分(转换为后缀)
string toPostfix(vector<string>& input){
string ans;
while(!input.empty()){
if(input.front().compare("/")!=0 && input.front().compare("*")!=0 && input.front().compare("+")!=0 && input.front().compare("-")!=0 && input.front().compare("(")!=0 && input.front().compare(")")!=0){
//first element is not operator, is operand
ans += input.front();
input.erase(input.begin());
}else if(input.front().compare(")") == 0){
while(mystack.top() != "("){
ans += mystack.top();
mystack.pop();
}
input.erase(input.begin());
mystack.pop();//remove "("
}else{
//stack isnt empty now, have operator
if(!mystack.empty()){
while(!mystack.empty() && getPriority(mystack.top())>=getPriority(input.front())){
ans += mystack.top();
mystack.pop();
}
}
mystack.push(input.front());
input.erase(input.begin());
}
}
while(!mystack.empty()){
ans += mystack.top();
mystack.pop();
}
return ans;
}