C++ 中求后缀表达式的值
假设我们有一个后缀表达式,我们必须求这个表达式的值。后缀表达式也称为逆波兰表示法。这里,我们必须使用栈数据结构计算后缀表达式。
因此,如果表达式为“21+3*”,那么答案是 9。
我们来看看步骤 −
- 对于后缀表达式中的每个字符 ch,执行以下操作
- 如果 ch 是一个运算符 $\odot$,那么
- a := 从栈中弹出第一个元素,
- b := 从栈中弹出第二个元素
- res := b $\odot$ a
- 将 res 压入栈中
- 如果 ch 是一个操作数,那么
- 将 ch 添加到栈中
- 如果 ch 是一个运算符 $\odot$,那么
- 返回栈顶元素
我们来看下面的实现,以更好地理解 −
示例
#include<bits/stdc++.h> using namespace std; float scanNum(char ch){ int value; value = ch; return float(value-'0');//return float from character } int isOperator(char ch){ if(ch == '+'|| ch == '-'|| ch == '*'|| ch == '/' || ch == '^') return 1;//character is an operator return -1;//not an operator } int isOperand(char ch){ if(ch >= '0' && ch <= '9') return 1;//character is an operand return -1;//not an operand } float operation(int a, int b, char op){ //Perform operation if(op == '+') return b+a; else if(op == '-') return b-a; else if(op == '*') return b*a; else if(op == '/') return b/a; else if(op == '^') return pow(b,a); //find b^a else return INT_MIN; //return negative infinity } float postfixEval(string postfix){ int a, b; stack<float> stk; string::iterator it; for(it=postfix.begin(); it!=postfix.end(); it++){ //read elements and perform postfix evaluation if(isOperator(*it) != -1){ a = stk.top(); stk.pop(); b = stk.top(); stk.pop(); stk.push(operation(a, b, *it)); }else if(isOperand(*it) > 0){ stk.push(scanNum(*it)); } } return stk.top(); } main(){ string post = "21+3*"; cout <<postfixEval(post); }
输入
"21+3*"
输出
9
广告