C++实现:无需转换,直接用栈求解中缀算术表达式的值
以下是使用 C++ 实现基于栈的中缀算术表达式求值的代码: ```cpp #include <iostream> #include <stack> #include <string> #include <cctype> double calculate(double num1, double num2, char op) { switch (op) { case '+': return num1 + num2; case '-': return num1 - num2; case '*': return num1 * num2; case '/': if (num2!= 0) { return num1 / num2; } else { std::cout << "除数不能为 0" << std::endl; return 0; } } return 0; } double evaluateInfixExpression(std::string expression) { std::stack<double> operandStack; std::stack<char> operatorStack; for (int i = 0; i < expression.size(); i++) { if (isdigit(expression[i]) || expression[i] == '.') { std::string numStr; while (i < expression.size() && (isdigit(expression[i]) || expression[i] == '.')) { numStr += expression[i++]; } i--; operandStack.push(atof(numStr.c_str())); } else if (expression[i] == '(') { operatorStack.push(expression[i]); } else if (expression[i] == ')') { while (operatorStack.top()!= '(') { double num2 = operandStack.top(); operandStack.pop(); double num1 = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(num1, num2, op)); } operatorStack.pop(); } else if (expression[i] == '+' || expression[i] == '-') { while (!operatorStack.empty() && operatorStack.top()!= '(') { double num2 = operandStack.top(); operandStack.pop(); double num1 = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(num1, num2, op)); } operatorStack.push(expression[i]); } else if (expression[i] == '*' || expression[i] == '/') { while (!operatorStack.empty() && (operatorStack.top() == '*' || operatorStack.top() == '/')) { double num2 = operandStack.top(); operandStack.pop(); double num1 = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(num1, num2, op)); } operatorStack.push(expression[i]); } } while (!operatorStack.empty()) { double num2 = operandStack.top(); operandStack.pop(); double num1 = operandStack.top(); operandStack.pop(); char op = operatorStack.top(); operatorStack.pop(); operandStack.push(calculate(num1, num2, op)); } return operandStack.top(); } int main() { std::string expression; while (true) { std::getline(std::cin, expression); if (expression == "=") { break; } double result = evaluateInfixExpression(expression.substr(0, expression.size() - 1)); std::printf("%.2f\n", result); } return 0; } ``` 这段代码实现了对中缀表达式的求值,通过两个栈分别存储操作数和操作符,并按照运算符的优先级进行计算。 ######[AI写代码神器 | 872点数解答 | 2024-10-26 20:10:49]
- 递归下降语法分析程序实例:从文法到 C 代码的完整实现(字节豆包 | 1371点数解答 | 2024-12-12 22:46:04)262
- SQL 实现:精准查询 20 岁选课学生学号、姓名、平均与总成绩(去重取最高) (字节豆包 | 116点数解答 | 2024-10-21 00:46:57)212
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)313
- JavaScript 开发揭秘:表达式 {{data}} 的工作原理及模板字符串应用(阿里通义 | 226点数解答 | 2023-11-09 01:17:26)244
- 揭秘!Angular表达式 {{yourmodel}} 的工作原理与灵活应用(阿里通义 | 187点数解答 | 2023-11-09 01:18:41)214
- Python 实现实数四则运算:输入表达式输出结果,处理除零与格式错误(字节豆包 | 286点数解答 | 2024-11-17 11:21:58)130
- C 语言实现:输入实数四则运算式输出保留两位小数结果(含特殊情况处理) (字节豆包 | 320点数解答 | 2024-11-17 11:22:27)145
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)254
- JavaScript 开发:用 Animation 实现自定义动画的简易教程 (阿里通义 | 333点数解答 | 2023-11-09 01:50:07)244
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)464
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)356