北京大学 程序设计与算法(二) 表达式求值

表达式由 项+或者-项 组成

项由 因子*或者/因子 组成

可以连加连减或者连连城连除

因子由 左括号 表达式 右括号组成

#include<iostream>

#include<cstring>

#include<cstdlib>

using namespace std;

int factor_value();

 int term_value();

int expression_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();//求第一个因子的值

       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;

}

猜你喜欢

转载自www.cnblogs.com/Invictus-Gaming/p/12336862.html
今日推荐