中缀表达式转后缀表达式用C++实现
时间: 2023-10-22 21:07:54 浏览: 122
你可以使用栈来实现中缀表达式转后缀表达式的算法。下面是一个使用 C++ 实现的示例:
```cpp
#include <iostream>
#include <stack>
#include <string>
// 操作符优先级比较函数
int getPriority(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
}
return 0;
}
// 中缀表达式转后缀表达式函数
std::string infixToPostfix(const std::string& infix) {
std::string postfix; // 后缀表达式结果字符串
std::stack<char> opStack; // 操作符栈
for (char ch : infix) {
if (ch >= '0' && ch <= '9') {
postfix += ch; // 数字直接添加到后缀表达式结果中
} else if (ch == '(') {
opStack.push(ch); // 左括号入栈
} else if (ch == ')') {
// 右括号遇到左括号之前的所有操作符出栈,并添加到后缀表达式结果中
while (!opStack.empty() && opStack.top() != '(') {
postfix += opStack.top();
opStack.pop();
}
opStack.pop(); // 弹出左括号
} else {
// 操作符遇到优先级更低或相等的操作符之前的所有操作符出栈,并添加到后缀表达式结果中
while (!opStack.empty() && opStack.top() != '(' &&
getPriority(opStack.top()) >= getPriority(ch)) {
postfix += opStack.top();
opStack.pop();
}
opStack.push(ch); // 当前操作符入栈
}
}
// 栈中剩余的操作符出栈,并添加到后缀表达式结果中
while (!opStack.empty()) {
postfix += opStack.top();
opStack.pop();
}
return postfix;
}
int main() {
std::string infixExpression;
std::cout << "请输入中缀表达式: ";
std::cin >> infixExpression;
std::string postfixExpression = infixToPostfix(infixExpression);
std::cout << "后缀表达式: " << postfixExpression << std::endl;
return 0;
}
```
你可以通过在终端输入中缀表达式,然后程序将输出相应的后缀表达式。注意,该实现假定输入的中缀表达式是有效的。
阅读全文