c++编程实现用户输入的任意表达式求值,并输出计算结果。为简化问题,要求只含二目运算符的加、减、乘、除算术表达式,并且操作数为一位字符表示的整数,
时间: 2024-11-09 14:22:48 浏览: 84
在C++中,我们可以使用栈数据结构和递归下降解析法来实现这个功能。首先,我们需要定义一些函数来处理四种基本的运算符:+、-、* 和 /,以及用于存储临时结果的变量。下面是一个简单的示例:
```cpp
#include <iostream>
#include <stack>
#include <cctype>
int precedence(char op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return -1; // 非运算符
}
bool isNumber(char ch) {
return std::isdigit(ch);
}
double applyOperator(std::stack<double>& values, std::stack<char>& ops, char op) {
double b = values.top(); values.pop();
double a = values.top(); values.pop();
switch (op) {
case '+': values.push(a + b); break;
case '-': values.push(a - b); break;
case '*': values.push(a * b); break;
case '/':
if (b != 0) values.push(a / b);
else throw "Division by zero error"; // 处理除零错误
break;
}
ops.pop();
return a;
}
double evaluateExpression(const std::string& expression) {
std::stack<double> values;
std::stack<char> ops;
for (size_t i = 0; i < expression.length(); ++i) {
if (isNumber(expression[i])) {
double num = 0;
while (i < expression.length() && isNumber(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
}
values.push(num);
} else if (expression[i] == '(') {
ops.push(expression[i]);
} else if (expression[i] == ')') {
while (!ops.empty() && ops.top() != '(') {
applyOperator(values, ops, ops.top());
}
ops.pop(); // 出栈左括号
} else { // 运算符
while (!ops.empty() && precedence(ops.top()) >= precedence(expression[i])) {
applyOperator(values, ops, ops.top());
}
ops.push(expression[i]);
}
}
// 检查剩余的运算符是否完整匹配括号
while (!ops.empty()) {
applyOperator(values, ops, ops.top());
}
return values.top();
}
int main() {
std::string input;
std::cout << "Enter an arithmetic expression with only binary operators (+, -, *, /): ";
getline(std::cin, input);
try {
double result = evaluateExpression(input);
std::cout << "Result: " << result << std::endl;
} catch (const char* msg) {
std::cerr << "Error: " << msg << std::endl;
}
return 0;
}
```
在这个程序中,`evaluateExpression`函数会根据输入的表达式逐步推导出正确的计算过程。用户需要按照提示输入一个包含加减乘除的简单算术表达式,程序会返回计算结果。
阅读全文