c语言计算器 栈,请问,用c语言做一个计算器 包括+-*/()的运算 用栈 该怎么做...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#define UINT unsigned int

struct LOGIC

{

UINT logic,site;

};

char *text="+8*9*(8+7)+12/6-4";

int calc_exp(char *sz);

int calc_part(int a,int b,UINT w);

int main(int argc,char *argv[])

{

std::cout<

std::cin.get();

return 0;

}

int calc_exp(char *sz)

{

int calc_rt=0;

UINT szcnt=0;

LOGIC *logic;

UINT *expval;

UINT lcnt=0;

UINT ecnt=0;

bool bj=false;

UINT ti=0;

int tn=0;

int tr=0;

char *tch=0;

szcnt=sizeof(sz);

bj=false;

for(UINT i=0;i

{

switch(sz[i])

{

case '+':

case '-':

case '*':

case '/':

case '(':

case ')':

bj=false;

lcnt++;

break;

default:

if(bj==false)

{

ecnt++;

bj=true;

}

break;

}

}

if(lcnt!=0)logic=new LOGIC[lcnt];

if(ecnt!=0)expval=new UINT[ecnt];

else return 0;

bj=false;

ti=0;

tn=0;

for(UINT i=0;i

{

switch(sz[i])

{

case '+':

case '-':

case '*':

case '/':

case '(':

case ')':

switch(sz[i])

{

case '+':

logic[ti].logic=0;

break;

case '-':

logic[ti].logic=1;

break;

case '*':

logic[ti].logic=2;

break;

case '/':

logic[ti].logic=3;

break;

case '(':

logic[ti].logic=4;

break;

case ')':

logic[ti].logic=5;

break;

}

bj=false;

ti++;

break;

default:

if(bj==false)

{

if(tch!=0)

{

delete[] tch;

tch=0;

}

tch=new char[logic[ti].site-i];

for(UINT j=i;j

{

tch[j-i]=sz[j];

}

expval[tn]=atoi(tch);

tn++;

bj=true;

}

break;

}

}

if(tch!=0)

{

delete[] tch;

tch=0;

}

if(lcnt==0)return expval[0];

ti=0;

tn=-1;

while(ti

{

switch(logic[ti].logic)

{

case 0:

case 1:

if(tn!=-1)

{

calc_part(calc_rt,tr,logic[tn].logic);

tn=-1;

}

else

{

tn=ti;

tr=expval[ti];

}

break;

break;

case 2:

tr*=expval[ti];

break;

case 3:

tr/=expval[ti];

break;

case 4:

for(UINT j=ti;j

{

if(logic[j].logic==5)

{

tch=new char[logic[j].site-logic[ti].site-1];

for(UINT k=0;k

{

tch[k]=sz[logic[ti].site+1+k];

}

calc_part(tr,calc_exp(tch),logic[ti-1].logic);

ti=j;

break;

}

}

break;

}

ti++;

}

return calc_rt;

}

int calc_part(int a,int b,UINT w)

{

switch(w)

{

case 0:

return (a+b);

break;

case 1:

return (a-b);

break;

case 2:

return (a*b);

break;

case 3:

return (a/b);

break;

}

}

还没测试过,做个构思吧,我百度了一下,你去这个地方看,那里跟你想要的更合适:

http://wenku.baidu.com/view/b841d90003d8ce2f006623cf.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值