酷代码 AI
菜单
服务商

C++实现前缀表达式求值及代码详解

### 💻前缀表达式求值原理 前缀表达式(波兰式)是一种将运算符置于操作数之前的表达式表示方法。计算前缀表达式的值,通常使用栈来实现。从右到左扫描表达式,遇到操作数就压入栈,遇到运算符就从栈中弹出相应数量的操作数进行计算,再将结果压回栈,扫描结束后栈顶元素就是表达式的值。 ### 📝代码实现 ```cpp #include <iostream> #include <stack> #include <sstream> #include <string> #include <cctype> // 计算前缀表达式的值 double evaluatePrefix(const std::string& expression) { std::stack<double> stack; std::istringstream iss(expression); std::string token; // 从右到左扫描 for (auto it = expression.rbegin(); it != expression.rend(); ++it) { if (*it == ' ') continue; std::string num; while (it != expression.rend() && (std::isdigit(*it) || *it == '.')) { num = *it + num; ++it; } if (!num.empty()) { stack.push(std::stod(num)); if (it != expression.rend()) --it; } else { double operand1 = stack.top(); stack.pop(); double operand2 = stack.top(); stack.pop(); switch (*it) { case '+': stack.push(operand1 + operand2); break; case '-': stack.push(operand1 - operand2); break; case '*': stack.push(operand1 * operand2); break; case '/': if (operand2 != 0) { stack.push(operand1 / operand2); } else { std::cerr << "Error: Division by zero" << std::endl; return 0; } break; default: std::cerr << "Error: Invalid operator" << std::endl; return 0; } } } return stack.top(); } int main() { std::string expression; std::cout << "Enter a prefix expression: "; std::getline(std::cin, expression); double result = evaluatePrefix(expression); std::cout << "Result: " << result << std::endl; return 0; } ``` ### 🧐代码解释 - `evaluatePrefix` 函数用于计算前缀表达式的值。 - 使用 `std::stack` 存储操作数。 - 从右到左扫描表达式,将操作数压入栈,遇到运算符就从栈中弹出操作数计算,再将结果压入栈。 - `main` 函数负责读取用户输入的表达式,调用 `evaluatePrefix` 函数计算结果并输出。 ### ⚠️注意事项 代码假设输入的前缀表达式格式正确且不包含非法字符,若输入包含除数字、运算符和空格之外的字符,程序可能出错。 ######[AI问答 | 725点数解答 | 2026-03-01 20:20:28]

相关提问
发财导航,免费问AI
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]