前中后缀
2025-01-12 20:29:56
发布于:北京
#include<bits/stdc++.h>
using namespace std;
int xxx(char a) {
if (a == '+' || a == '-')
return 1;
else
return 2;
}
//中转后
string _zh(string s) {
string c = "";
stack<char> sk;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
c += s[i];
} else if (s[i] == '(') {
sk.push(s[i]);
} else if (s[i] == ')') {
while (!sk.empty() && sk.top() != '(') {
c += sk.top();
sk.pop();
}
sk.pop();
} else {
while (!sk.empty() && sk.top() != '(' && xxx(sk.top()) >= xxx(s[i])) {
c += sk.top();
sk.pop();
}
sk.push(s[i]);
}
}
while (!sk.empty()) {
c += sk.top();
sk.pop();
}
return c;
}
//中转前
string _zq(string s) {
string c = "";
stack<char> sk;
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] >= 'a' && s[i] <= 'z') {
c += s[i];
} else if (s[i] == ')') {
sk.push(s[i]);
} else if (s[i] == '(') {
while (!sk.empty() && sk.top() != ')') {
c += sk.top();
sk.pop();
}
sk.pop();
} else {
while (!sk.empty() && sk.top() != ')' && xxx(sk.top()) >= xxx(s[i])) {
c += sk.top();
sk.pop();
}
sk.push(s[i]);
}
}
while (!sk.empty()) {
c += sk.top();
sk.pop();
}
reverse(c.begin(), c.end());
return c;
}
//后缀求值
long long ans_h(string s) {
stack<long long> sk;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9')
sk.push(s[i] - '0');
else {
long long x = sk.top();
sk.pop();
long long y = sk.top();
sk.pop();
if (s[i] == '+')
sk.push(y + x);
else if (s[i] == '-')
sk.push(y - x);
else if (s[i] == '*')
sk.push(y * x);
else if (s[i] == '/')
sk.push(y / x);
}
}
return sk.top();
}
//前缀求值
long long ans_q(string s) {
stack<long long> sk;
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] >= '0' && s[i] <= '9')
sk.push(s[i] - '0');
else {
long long x = sk.top();
sk.pop();
long long y = sk.top();
sk.pop();
if (s[i] == '+')
sk.push(x + y);
else if (s[i] == '-')
sk.push(x - y);
else if (s[i] == '*')
sk.push(x * y);
else if (s[i] == '/')
sk.push(x / y);
}
}
return sk.top();
}
int main() {
return 0;
}
有帮助,赞一个