表达式求值-递归

表达式由项组成(+ -)项由因子组成(* /)

 

#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
int factor_value();//求一个因子的值
int term_value();//求一个项的值
int expression_value();//求一个表达式的值
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();
		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;
}
int main() {

	cout << expression_value() << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37503890/article/details/87891077