中缀表达式转后缀表达式
我好菜,连这都不会了
开一个栈存储符号。
读取到数字,直接输出。
读取到加减乘除符号,看栈顶符号的优先级是否大于等于新来的符号,如果\(\texttt{true}\),那么输出栈顶符号并弹出,一直输完所有满足条件的栈顶后再把新来的符号入栈。
读取到右括号,就不断输出栈顶直到栈顶为左括号,注意后缀表达式不需要括号。
注:我们定义加减的优先级为1,乘除的优先级最大为2,左括号的优先级最小为0。
\(\texttt{Code}\)
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
char x;
int sum = 0;
map<char, int> mp;
mp['+'] = mp['-'] = 1;
mp['*'] = mp['/'] = 2;
mp['('] = mp[')'] = 0;
stack<char> S;
while (cin >> x) {
if (isdigit(x)) {
cout << x;
} else if (x == '(') {
S.push(x);
} else if (x == ')') {
while (S.top() != '(') {
cout << S.top();
S.pop();
}
S.pop();
} else {
while (!S.empty() && mp[S.top()] >= mp[x]) {
cout << S.top();
S.pop();
}
S.push(x);
}
}
while (!S.empty()) {
cout << S.top();
S.pop();
}
return 0;
}
本文来自博客园,作者:zjsqwq,转载请注明原文链接:https://www.cnblogs.com/zjsqwq/p/16495249.html