#include<iostream>
using namespace std;
int factor_value();
int term_value();
int expression_value();
int factor_value()//因子
{
int result = 0;
char op = cin.peek();//用op存储缓冲区第一个字符,但并不从键盘缓冲区取走
if (op == '(')//看是不是括号
{
cin.get();//从缓冲区读走'('
result = expression_value();//计算括号内的表达式
cin.get();//从缓冲区读走')'
}
else
{
while (isdigit(op))//判断op是不是数字
{
cin.get();//从缓冲区拿走op的值
result = result * 10 + op - '0';//这个用于将读取到的字符转化成整数
op = cin.peek();//继续看缓冲区的第一个字符
}
}
return result;
}
int term_value()//项
{
int result = factor_value();
bool more = true;//判断还没有其他的项
while (more)
{
char op = cin.peek();//看接下来的第一个字符是不是乘号或者除号
if (op == '*' || op == '/')
{
cin.get();//从键盘缓冲区取出op的字符
int temp = factor_value();
if (op == '*')
{
result *= temp;
}
else if (op == '/')
{
result /= temp;
}
}
else
{
more = false;
}
}
return result;
}
int expression_value()//表达式
{
int result = term_value();//获取一项的值
bool more = true;//判断还没有其他的项
while (more)
{
char op = cin.peek();//看接下来的第一个字符是不是加号或者减号
if (op == '+' || op == '-')
{
cin.get();//从键盘缓冲区取出op的字符
int temp = term_value();
if (op == '+')
{
result += temp;
}
else if (op == '-')
{
result -= temp;
}
}
else
{
more = false;
}
}
return result;
}
int main()
{
cout << expression_value() << endl;
return 0;
}
//函数cin.peek()用于从键盘缓冲区看第一个字符,但并不会取走第一个字符
//函数cin.get()用于从键盘缓冲区读走第一个字符,会取走第一个字符