#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
//表达式函数
int expression_value();
//因子函数
int term_value();
//项函数
int factor_value();
int main()
{
cout<<expression_value()<<endl;
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();
//bool more = true;
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();
//读取下一个数字 例如12 要读取两次两次 一次是1 然后去除 在读取2
c = cin.peek();
}
}
return result;
}
C++ 表达式求值 递归
最新推荐文章于 2024-07-06 19:04:45 发布