阅读量:0
使用C++的stack类可以实现表达式求值,具体步骤如下:
定义一个运算符优先级队列,用于存储运算符和操作数。
遍历表达式中的每个字符,如果是数字,则将其转换为整数并压入栈中。
如果字符是运算符,则将其与栈顶的运算符进行比较,如果优先级更高,则将其压入栈中;否则,将栈顶的运算符弹出并输出结果,然后将当前运算符压入栈中。
遍历完表达式后,栈中剩余的都是操作数,将它们依次弹出并输出结果即可。
下面是一个示例代码:
#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