3.1-递归-四则运算表达式求值

本文介绍了一个使用C++实现的表达式计算器,能够解析并计算包含加、减、乘、除运算的数学表达式。通过递归地处理括号、数字和操作符,此程序能够正确解析复杂的数学表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
int factor_value();
int term_value();
int expression_value();
int main(){
	cout << expression_value() << endl;
	cin.get();
	cin.get();
	return 0;
}int expression_value()
{
	int result = term_value();
	bool more = true;
	while (more){
		char op = cin.peek();
		if (op == '+' || op == '-'){
			cin.get();
			int value = term_value();
			if (op == '+')
				result += value;
			else
				result -= value;
		}
		else more = false;
	}
	return result;
}
int term_value(){
	int result = factor_value();
	while (true){
		char op = cin.peek();//cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,
		//但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
		//其功能是从输入流中读取一个字符 但该字符并未从输入流中删除
		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;
}//(2+3)*(5+7)+9/3

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值