表达式由项组成(+ -)项由因子组成(* /)
#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;
}