用c++写一段代码,该代码利用栈实现中缀表达式转后缀表达式
时间: 2023-08-06 13:19:37 浏览: 106
C++利用栈实现中缀表达式转后缀表达式
以下是使用 C++ 栈实现中缀表达式转后缀表达式的示例代码:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int getPriority(char c) {
switch (c) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '^':
return 3;
default:
return 0;
}
}
string infixToPostfix(string infix) {
stack<char> opStack;
string postfix;
for (char c : infix) {
if (isdigit(c)) {
postfix += c;
} else if (c == '(') {
opStack.push(c);
} else if (c == ')') {
while (!opStack.empty() && opStack.top() != '(') {
postfix += opStack.top();
opStack.pop();
}
if (!opStack.empty()) {
opStack.pop();
}
} else {
while (!opStack.empty() && getPriority(opStack.top()) >= getPriority(c)) {
postfix += opStack.top();
opStack.pop();
}
opStack.push(c);
}
}
while (!opStack.empty()) {
postfix += opStack.top();
opStack.pop();
}
return postfix;
}
int main() {
string infix = "3*(4+5)-6/2";
string postfix = infixToPostfix(infix);
cout << postfix << endl;
return 0;
}
```
在上述代码中,`infixToPostfix` 函数接受一个中缀表达式字符串作为参数,然后利用一个字符栈和一个字符串变量来转换为后缀表达式,并将最终的后缀表达式返回。该函数的实现遵循以下规则:
1. 遇到数字,直接加入后缀表达式字符串中。
2. 遇到左括号,将其压入栈中。
3. 遇到右括号,将栈顶的操作符弹出并加入后缀表达式字符串中,直到遇到左括号为止。左括号不会被加入后缀表达式中。
4. 遇到操作符,将其压入栈中。但在压入操作符之前,需要先将栈中已有的较高或相等优先级的操作符弹出并加入后缀表达式字符串中,直到遇到优先级比它低的操作符为止。
5. 如果已经处理完了中缀表达式的所有字符,但栈中还有操作符,那么将它们弹出并加入后缀表达式字符串中。
在上述示例代码中,我们将中缀表达式字符串设为 "3*(4+5)-6/2",该程序将输出对应的后缀表达式字符串 "345+*62/-"。
阅读全文