用一个结构体记录数组或操作符
typedef struct Node{
//运算结点,记录数字或运算符号
bool isop;
char op;
int num;
Node(){
}
Node(int d){
num=d;
isop=0;
}
Node(char op_){
op=op_;
isop=1;
}
void output(){
if(isop) cout<<op;
else cout<<num;
}
}Node;
把表达式切割为结点
类似词法分析
只能对单个数字进行切割,待优化
vector<Node> exp2nodes(string exp){
vector<Node> ans;
FF(i,exp.size()){
char c=exp[i];
if(c>='0' && c<='9'){
ans.push_back((int)(c-'0'));
}else{
ans.push_back(c);
}
}
return ans;
}
中缀表达式生成后缀表达式
https://www.cnblogs.com/hantalk/p/8734511.html
int getPriority(char op){
switch(op){
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}
vector<Node> yieldPostOrderExpress(vector<Node> &in){
vector<Node> post;
Node ops[LEN];
int top=-1;//栈顶指针
FF(i,in.size()){
Node u=in[i];
if(u.isop){
if(u.op=='('){
ops[++top]=u;