思路:表达式存储在一个字符数组 exp[] 中,从右至左扫描,遇到数值的时候 入栈,遇到运算符的时候 出栈(连续两次)然后拿两个数值 a 和 b 以及运算符 op 进行计算,最后将计算结果再入栈,直到遍历完字符数组为止!
// 运算函数,用来计算 a Op b
int op(int a , int b , char Op){
if(Op == '+')
return a + b;
if(Op == '-')
return a - b;
if(Op == '*')
return a * b;
if(Op == '/'){
if(b == 0){
cout<<"ERROR"<<endl;
}else{
return a/b;
}
}
}
// 计算前缀表达式
int com(char exp[] , int n){ // n 字符数组长度
int i , a , b , c;
char Op; // 接收运算字符
// 创建顺序栈
int stack[maxSize]; // maxSize 已定义最大空间
int top = -1;
for(i = n-1; i >= 0; --i){
// 是数字,存入栈中
if(exp[i] >= '0' && exp[i] <= '9'){
stack[++top] = exp[i] - '0';
}else{
// 不是数字,连续两次出栈
Op = exp[i];
a = stack[top--];
b = stack[top--];
c = op(a , b , Op);
stack[++top] = c;
}
}
return stack[top];
}