在C ++程序中评估波兰语反向符号

假设我们有反向抛光符号,并且我们必须评估该值。反向波兰语符号也称为后缀表达式。在这里,我们必须使用堆栈数据结构来解决后缀表达式。

从后缀表达式中,找到一些操作数后,将它们压入堆栈。找到某个运算符后,将从堆栈中弹出两个项目,然后按正确的顺序执行操作。之后,结果也被压入堆栈中以备将来使用。完成整个表达式后,最终结果也将存储在堆栈顶部。因此,如果表达式为“ 53 + 62 / * 35 * +”,则答案将为39

让我们看看步骤-

  • 对于后缀表达式中的每个字符ch,请执行

    • 将ch添加到堆栈中

    • :=从堆栈中弹出第一个元素,

    • b:=从堆栈中弹出第二个元素

    • res:= b☉a

    • 将res推入堆栈

    • 如果ch是运算符☉,则

    • 否则,如果ch是操作数,则

    • 堆栈顶部的返回元素

    例子(C ++)

    让我们看下面的实现以更好地理解-

    #include<iostream>
    #include<cmath>
    #include<stack>
    #include<climits>
    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 = "53+62/*35*+";
       cout << "The result is: "<<postfixEval(post);
    }

    输入项

    "53+62/*35*+"

    输出结果

    The result is: 39