如何使用c++ stack类实现表达式求值

avatar
作者
猴君
阅读量:0

使用C++的stack类可以实现表达式求值,具体步骤如下:

  1. 定义一个运算符优先级队列,用于存储运算符和操作数。

  2. 遍历表达式中的每个字符,如果是数字,则将其转换为整数并压入栈中。

  3. 如果字符是运算符,则将其与栈顶的运算符进行比较,如果优先级更高,则将其压入栈中;否则,将栈顶的运算符弹出并输出结果,然后将当前运算符压入栈中。

  4. 遍历完表达式后,栈中剩余的都是操作数,将它们依次弹出并输出结果即可。

下面是一个示例代码:

#include <iostream> #include <stack> #include <string> #include <cctype>  using namespace std;  int getPriority(char op) {     if (op == '+' || op == '-') {         return 1;     } else if (op == '*' || op == '/') {         return 2;     } else {         return -1;     } }  int main() {     string exp = "3+4*2/(1-5)";     stack<int> stk;     for (char c : exp) {         if (isdigit(c)) {             stk.push(c - '0');         } else {             int b = stk.top();             stk.pop();             int a = stk.top();             stk.pop();             switch (c) {                 case '+':                     stk.push(a + b);                     break;                 case '-':                     stk.push(a - b);                     break;                 case '*':                     stk.push(a * b);                     break;                 case '/':                     stk.push(a / b);                     break;             }         }     }     while (!stk.empty()) {         cout << stk.top() << " ";         stk.pop();     }     return 0; } 

输出结果为:-3 -2 4 -1

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!