表达式求值
作者:
三万岁_6
,
2024-07-30 00:36:57
,
所有人可见
,
阅读 2
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int priority(char op){
if(op == '+' || op == '-')
return 1;
else if(op == '*' || op == '/')
return 2;
else
return 0;
}
int option(int a,int b,char op){
if(op == '+')
return a + b;
else if(op == '-')
return a - b;
else if(op == '*')
return a * b;
else
return a / b;
}
string infixToPostfix(string infix){//中缀表达式转为后缀表达式
stack<char> st;
string postfix;
for(char c : infix){
if(c == ' ') continue;//跳过空格
if(isdigit(c)){//c是数字
postfix += c;
}
else if(c == '('){
st.push(c);
}
else if(c == ')'){
while(!st.empty() && st.top() != '('){
postfix += st.top();
st.pop();
}
if(!st.empty() && st.top() != '('){
return "Invalid Expression";
}
st.pop();//弹出左括号
}
else{//运算符
while(!st.empty() && priority(c) <= priority(st.top())){//栈顶元素优先级大于等于当前运算符
postfix += st.top();
st.pop();
}
st.push(c);//将当前运算符入栈
}
}
while(!st.empty()){//扫描完字符串后将剩余运算符出栈
if(st.top() == '(')
return "Invalid Expression";
postfix += st.top();
st.pop();
}
return postfix;
}
int main(){
string infix;
cin >> infix;
stack<int> nums;
string postfix = infixToPostfix(infix);
for(char c : postfix){
if(isdigit(c)){
nums.push(c);
}
else{
int b = nums.top();
nums.pop();
int a = nums.top();
nums.pop();
int res = option(a,b,c);
nums.push(res);
}
}
cout << nums.top() << endl;
cout << postfix << endl;
return 0;
}