给定一个中缀表达式,包含数字,(,),+,-,*,/中的若干种,以'#'作为结束,问你转换成后缀表达式是什么。 Input 第一行输入一个字符串s(1≤|s|≤20). Output 输出对应的后缀表达式,用空格隔开 Samples 输入数据 1 ( 12 + 33 ) * 5 # 输出数据 1 12 33 + 5 *
时间: 2024-04-17 14:26:28 浏览: 69
将中缀表达式转化为后缀表达式
根据您提供的输入和输出示例,我们需要将中缀表达式 `(12 + 33) * 5` 转换为后缀表达式。
根据您之前提供的代码,我们可以使用 `infixToPostfix` 函数来实现中缀到后缀的转换。以下是修改后的代码:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-')
return 1;
if (op == '*' || op == '/')
return 2;
return 0;
}
string infixToPostfix(string expression) {
string postfix = "";
stack<char> stk;
stk.push('#');
for (int i = 0; i < expression.length(); i++) {
char c = expression[i];
if (isalnum(c)) {
postfix += c;
} else if (c == '(') {
stk.push('(');
} else if (c == ')') {
while (stk.top() != '#' && stk.top() != '(') {
postfix += stk.top();
stk.pop();
}
stk.pop();
} else {
while (stk.top() != '#' && precedence(c) <= precedence(stk.top())) {
postfix += stk.top();
stk.pop();
}
stk.push(c);
}
}
while (stk.top() != '#') {
postfix += stk.top();
stk.pop();
}
return postfix;
}
int main() {
string expression;
cin >> expression;
string postfix = infixToPostfix(expression);
cout << postfix << endl;
return 0;
}
```
输入示例中的中缀表达式是 `( 12 + 33 ) * 5`,根据代码执行后,输出的后缀表达式是 `12 33 + 5 *`。每个操作数和操作符之间使用空格进行分隔。
希望这可以帮助到您。如果您还有其他问题,请随时提问。
阅读全文