作者:k3as0n_701 | 来源:互联网 | 2024-11-21 15:38
本文介绍了一种使用C++实现的递归方法来解析并计算数学表达式的值。该程序能够正确处理包括加法、减法、乘法和除法在内的基本算术运算。
#include
#include
#include
using namespace std;
int factor_value();
int term_value();
int expression_value();
int main()
{
cout < return 0;
}
int expression_value() // 计算表达式的值
{
int result = term_value(); // 计算第一项的值
while (true)
{
char op = cin.peek(); // 查看但不取出字符
if (op == '+' || op == '-')
{
cin.get(); // 取出操作符
int value = term_value(); // 计算下一项的值
if (op == '+')
{
result += value;
}
else
{
result -= value;
}
}
else
{
break;
}
}
return result;
}
int term_value() // 计算项的值
{
int result = factor_value(); // 计算第一个因子的值
while (true)
{
char op = cin.peek();
if (op == '*' || op == '/')
{
cin.get(); // 吸收操作符
int value = factor_value();
if (op == '*')
{
result *= value;
}
else
{
result /= value;
}
}
else
{
break;
}
}
return result;
}
int factor_value() // 计算因子的值
{
int result = 0;
char c = cin.peek();
if (c == '(')
{
cin.get(); // 吸收左括号
result = expression_value(); // 计算括号内的表达式值
cin.get(); // 吸收右括号
}
else // 单个数字也是一个因子
{
while (isdigit(c))
{
result = 10 * result + c - '0';
cin.get(); // 吸收当前字符
c = cin.peek(); // 获取下一个字符
}
}
return result;
}
上述代码通过递归调用实现了对表达式的解析和计算。每个函数负责解析表达式的一部分,并根据相应的操作符执行计算。通过这种方式,可以有效地处理复杂的数学表达式。