C++ 递归计算器 源代码

//更多更新代码以及开发文档下载请访问missingwall.org 灰色迷墙 CSDN发表有延迟
#include
< iostream >

#include
< cstdlib >

#include
< cctype >

using   namespace  std;



// function reg



int  addsubt();



int  multdiv();



int  number();



void  error();







// 全局表达式缓冲器



static   char  expr[ 81 ]; // 存储输入字符串 



static   int  pos; // 字符串下标 



////



// int main



////





int  main()



{



    
int ans;


    
do



    
{



        
//初始化下标



        pos 
= 0;



        
//read 



        cin 
>>expr;



        
//求值



        ans 
= addsubt();



        
if(expr[pos] != '')



        error();



        
if(ans!=0)



        cout
<<ans<<endl;



    }




        
while (ans != 0);



        
return 0;



}




//



//



//



int  addsubt()



{



    
int rtn = multdiv();



    
while (expr[pos] == '+' || expr[pos] == '-')



    
{



          
int op = expr[pos++];



          
int opr2 = multdiv();



          
if(op == '+')



          rtn 
+=opr2;



          
else



          rtn 
-=opr2;



    }




    
return rtn;



}








///







int  multdiv()



{



    
int rtn = number();



    
while(expr[pos] == '*' || expr[pos] == '/')



    
{



                    
int op =expr[pos++];



                    
int opr2 = number();




                    
if(op == '*')



                    rtn 
*=opr2;



                    
else



                    rtn 
/=opr2;



    }




    
return rtn;



}







/////







int  number()



{



    
int rtn;



    
if(expr[pos] == '(')



    
{



                 pos
++;



                 rtn 
= addsubt();//back to top



                 
if(expr[pos++!= ')')



                 error();



                 
return rtn;



    }




    
//square 



    
if(!isdigit(expr[pos]))



    error();



    rtn 
= atoi(expr+pos);



    
while(isdigit(expr[pos]))



    pos
++;



    

    
return rtn;



}






///



void  error()



{



     cout
<<' ';



     
while(pos--)//放置错误指针



     cout
<<' ';



     exit(
-1);



}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值