编程实现表达式转换
原题链接:68729.这是笔记的地方2025-11-06 14:50:24
发布于:广东
中转后
#include <bits/stdc++.h>
using namespace std;
stack<char> sufft;
stack<char> pret;
string suffs,pres;
int level(char c){
if(c=='+'||c=='-') return 1;
if(c=='*'||c=='/') return 2;
}
void suff(string s){
for(int i=0;i<s.size();i++){
if(s[i]>='a' && s[i]<='z'){
suffs += s[i];
}else if(s[i]=='('){
sufft.push(s[i]);
}else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
if(sufft.empty() || sufft.top()=='('){
sufft.push(s[i]);
}else{
while(!sufft.empty() && sufft.top()!='(' && level(sufft.top()) >= level(s[i]))
{
suffs += sufft.top();
sufft.pop();
}
sufft.push(s[i]);
}
}else if(s[i]==')'){
while(sufft.top()!='('){
suffs += sufft.top();
sufft.pop();
}
sufft.pop();
}
}
while(!sufft.empty()){
suffs += sufft.top();
sufft.pop();
}
}
int main(){
string s1;
cin >> s1;
suff(s1);
cout << suffs;
return 0;
}
中转前
#include <bits/stdc++.h>
using namespace std;
int f1(char x) {
if(x=='+'||x=='-')return 1;
if(x=='*'||x=='/')return 2;
return 0;
}
int f2(char x) {
if(x=='+'||x=='-'||x=='*'||x=='/')return 1;
return 0;
}
int main(){
string a;
cin>>a;
reverse(a.begin(),a.end());
for(int i=0;i<a.size();i++){
if(a[i]=='(')a[i]=')';
else if(a[i]==')')a[i]='(';
}
stack<char> s;
string b="";
for(int i=0;i<a.size();i++){
char tmp=a[i];
if(tmp>='a'&&tmp<='z'){
b+=tmp;
}else if(tmp=='('){
s.push(tmp);
}else if(tmp==')'){
while(!s.empty()&&s.top()!='('){
b+=s.top();
s.pop();
}
if(!s.empty())s.pop();
}else if(f2(tmp)){
while(!s.empty()&&f1(s.top())>f1(tmp)){
b+=s.top();
s.pop();
}
s.push(tmp);
}
}
while(!s.empty()){
b+=s.top();
s.pop();
}
reverse(b.begin(),b.end());
cout<<b<<endl;
return 0;
}
中转前后
#include <bits/stdc++.h>
using namespace std;
stack<char> sufft;
stack<char> pret;
string suffs,pres;
int level(char c){
if(c=='+'||c=='-') return 1;
if(c=='*'||c=='/') return 2;
}
void suff(string s){
for(int i=0;i<s.size();i++){
if(s[i]>='a' && s[i]<='z'){
suffs += s[i];
}else if(s[i]=='('){
sufft.push(s[i]);
}else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
if(sufft.empty() || sufft.top()=='('){
sufft.push(s[i]);
}else{
while(!sufft.empty() && sufft.top()!='(' && level(sufft.top()) >= level(s[i]))
{
suffs += sufft.top();
sufft.pop();
}
sufft.push(s[i]);
}
}else if(s[i]==')'){
while(sufft.top()!='('){
suffs += sufft.top();
sufft.pop();
}
sufft.pop();
}
}
while(!sufft.empty()){
suffs += sufft.top();
sufft.pop();
}
}
void pre(string s){
for(int i=s.size()-1;i>=0;i--){
if(s[i]>='a' && s[i]<='z'){
pres += s[i];
}else if(s[i]==')'){
pret.push(s[i]);
}else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
if(pret.empty() || pret.top()==')'){
pret.push(s[i]);
}else{
while(!pret.empty() && pret.top()!=')' && level(pret.top()) >= level(s[i]))
{
pres += pret.top();
pret.pop();
}
pret.push(s[i]);
}
}else if(s[i]=='('){
while(pret.top()!=')'){
pres += pret.top();
pret.pop();
}
pret.pop();
}
}
while(!pret.empty()){
pres += pret.top();
pret.pop();
}
}
int main(){
string s1;
cin >> s1;
suff(s1);
pre(s1);
reverse(pres.begin(),pres.end());
cout << pres<<endl;
cout << suffs<<endl;
return 0;
}
前转后
#include<bits/stdc++.h>
using namespace std;
stack<char> sufft;
string suffs;
const int maxSize = 109;
int level(char c) {
if (c == '+' || c == '-')
return 1;
else
return 2;
}
void suff(string s){
for(int i=0;i<s.size();i++){
if(s[i]>='a' && s[i]<='z'){
suffs += s[i];
}else if(s[i]=='('){
sufft.push(s[i]);
}else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
if(sufft.empty() || sufft.top()=='('){
sufft.push(s[i]);
}else{
while(!sufft.empty() && sufft.top()!='(' && level(sufft.top()) >= level(s[i]))
{
suffs += sufft.top();
sufft.pop();
}
sufft.push(s[i]);
}
}else if(s[i]==')'){
while(sufft.top()!='('){
suffs += sufft.top();
sufft.pop();
}
sufft.pop();
}
}
while(!sufft.empty()){
suffs += sufft.top();
sufft.pop();
}
}
int main() {
string s;
cin >> s;
stack<string> num;
for (int i = s.length() - 1; i >= 0; i--) {
if (s[i] >= 'a' && s[i] <= 'z') {
num.push(string(1,s[i]));
}
else {
string l = num.top(); num.pop();
string r = num.top(); num.pop();
string ans = "(" + l + s[i] + r + ")";
num.push(ans);
}
}
suff(num.top());
cout << suffs;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
stack<int> num;
for (int i = 0; i < s.length(); i++) {
if (s[i] >= '0' && s[i] <= '9') {
num.push(s[i] - '0');
}
else {
int r = num.top(); num.pop();
int l = num.top(); num.pop();
if (s[i] == '+') num.push(l + r);
else if (s[i] == '-') num.push(l - r);
else if (s[i] == '*') num.push(l * r);
else num.push(l / r);
}
}
cout << num.top();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
stack<int> st;
for (int i = s.length()-1; i >= 0; i--) {
if (s[i] >= '0' && s[i] <= '9') {
st.push(s[i] - '0');
}
else {
int l = st.top(); st.pop();
int r = st.top(); st.pop();
if (s[i] == '+') {
st.push(l + r);
}
else if (s[i] == '-') {
st.push(l - r);
}
else if (s[i] == '*') {
st.push(l * r);
}
else if (s[i] == '/') {
st.push(l / r);
}
}
}
cout << st.top();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
stack<int> num;
stack<char> op;
int getPriority(char op) {
if (op == '+' || op == '-')
return 0; //+或-的优先级比较低
return 1;
}
void calc() {
int r = num.top(); num.pop();//栈顶是右操作数
int l = num.top(); num.pop();//次栈顶是左操作数
if (op.top() == '+') num.push(l + r);
if (op.top() == '-') num.push(l - r);
if (op.top() == '/') num.push(l / r);
if (op.top() == '*') num.push(l * r);
op.pop();//弹出运算符
}
int main() {
string s;
cin >> s;
for (int i = 0; i < s.length(); i++) {
if (s[i] >= '0' && s[i] <= '9') {
num.push(s[i] - '0');
}
else {
if (s[i] == '(') {
op.push(s[i]);//左括号直接进栈
}
else if (s[i] == '+'||s[i]=='-'||s[i]=='*'||s[i]=='/') {
while (op.size() && op.top()!='('&&getPriority(op.top()) >= getPriority(s[i])) {
calc();
}
op.push(s[i]);
}
else if (s[i] == ')') {
while (op.top() != '(') {
calc();
}
op.pop();//弹出左括号
}
}
}
while (op.size()) {
calc();
}
cout << num.top();
return 0;
}
这里空空如也







有帮助,赞一个