将中缀表达式转为前缀表达式用Qt实现
时间: 2024-02-05 18:11:02 浏览: 152
中缀表达式转前缀表达式的实现方法是通过将中缀表达式反转并进行一些修改。这个过程可以用栈来实现。下面是一个用Qt实现的示例代码:
```cpp
#include <QStack>
#include <QString>
QString infixToPrefix(QString infix)
{
QStack<char> stack;
QString prefix;
// 反转中缀表达式
infix = infix.reversed();
for (int i = 0; i < infix.length(); i++) {
QChar ch = infix.at(i);
if (ch.isDigit() || ch.isLetter()) {
// 如果是数字或字母,直接加入前缀表达式
prefix.append(ch);
} else if (ch == ')') {
// 如果是右括号,将其入栈
stack.push(ch);
} else if (ch == '(') {
// 如果是左括号,将栈中的运算符出栈并加入前缀表达式,直到遇到右括号
while (!stack.isEmpty() && stack.top() != ')') {
prefix.append(stack.pop());
}
// 将右括号出栈
stack.pop();
} else {
// 如果是运算符,将栈中优先级高于等于该运算符的其他运算符出栈并加入前缀表达式
while (!stack.isEmpty() && precedence(stack.top()) >= precedence(ch)) {
prefix.append(stack.pop());
}
// 将该运算符入栈
stack.push(ch);
}
}
// 将栈中剩余的运算符加入前缀表达式
while (!stack.isEmpty()) {
prefix.append(stack.pop());
}
// 最后再次反转前缀表达式得到正确的顺序
return prefix.reversed();
}
int precedence(char op)
{
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else {
return 0;
}
}
```
使用示例:
```cpp
QString infix = "1+2*3-(4/5)";
QString prefix = infixToPrefix(infix);
qDebug() << prefix; // 输出:-+1*23/45
```
需要注意的是,在这个实现中,只考虑了加减乘除四种运算符,如果需要支持更多的运算符,需要在 `precedence` 函数中添加相应的优先级判断。
阅读全文
相关推荐
















