我的意思是要利用表达式树的知识将中缀表达式转化为后缀表达式
时间: 2024-05-15 10:19:12 浏览: 47
将中缀表达式转化为后缀表达式
好的,针对您的问题,我可以为您提供以下代码示例:
```
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool isOperator(char c) { // 判断是否为运算符
if (c == '+' || c == '-' || c == '*' || c == '/')
return true;
return false;
}
bool isOperand(char c) { // 判断是否为操作数
if (c >= '0' && c <= '9')
return true;
return false;
}
int precedence(char c) { // 返回运算符优先级
if (c == '/' || c == '*')
return 2;
if (c == '+' || c == '-')
return 1;
return 0;
}
string infixToPostfix(string exp) { // 中缀表达式转后缀表达式
stack <char> s;
string postfix = "";
for (int i = 0; i < exp.length(); i++) {
if (exp[i] == ' ' || exp[i] == ',')
continue;
else if (isOperator(exp[i])) {
while (!s.empty() && s.top() != '(' && precedence(s.top()) >= precedence(exp[i])) {
postfix += s.top();
s.pop();
}
s.push(exp[i]);
}
else if (isOperand(exp[i])) {
postfix += exp[i];
}
else if (exp[i] == '(') {
s.push(exp[i]);
}
else if (exp[i] == ')') {
while (!s.empty() && s.top() != '(') {
postfix += s.top();
s.pop();
}
s.pop();
}
}
while (!s.empty()) {
postfix += s.top();
s.pop();
}
return postfix;
}
int main() {
string exp = "5 + 4 * 6 - 7 / 3";
string postfixExp = infixToPostfix(exp);
cout << "中缀表达式为:" << exp << endl;
cout << "后缀表达式为:" << postfixExp << endl;
return 0;
}
```
感谢您的提问,希望代码能够满足您的需求!如果您有其他问题,可以继续向我提问哦。
阅读全文