编程对一个逆波兰式(后缀表达式)进行求值,如“435*+23*-”的结果是13,函数的参数为字符串(后缀表达式),假定字符串为正确的逆波兰式。





实现思想:

(1)遇到数字就放在栈中

(2)遇到运算符就从栈中取出数字,上面的数字放在运算符右边,下面的数字放在运算符左边

(3)运算结果再放在栈中,最后栈中余下的数为运算结果


int Compute(stack *s,char *str)

{

char *p=str;

int right;//存放右操作数

int left;//左操作数

while(*p != '\0')

{

if(isdigit(*p)) //如果是数字则存放在栈中

{

s->elem[s->top++] = *p;

}

else if(*p == '+')//是运算符时则取出数字计算后再放到栈中

{

right = s->elem[--s->top]-48;//由于放在栈中的数字是以ASCII码形式保存,运算时是以10进制计算的,因此计算时-48转换为10进制

left = s->elem[--s->top]-48;

s->elem[s->top++] = left + right+48;//由于保存在栈中的数最后还要拿出来和ASCII计算,为了和上面的-48统一,这里再转换为ASCII码

}

else if(*p == '-')

{

right = s->elem[--s->top]-48;

left = s->elem[--s->top]-48;

s->elem[s->top++] = left - right+48;

}

else if(*p == '*')

{

right = s->elem[--s->top]-48;

left = s->elem[--s->top]-48;

s->elem[s->top++] = left * right+48;

}

else if(*p == '/')

{

right = s->elem[--s->top]-48;

left = s->elem[--s->top]-48;

s->elem[s->top++] = left / right+48;

}

p++;

}

s->elem[--s->top]-=48;//注意最后栈中的一个数是计算结果,Pop出来时应该转换为相应的10进制

return s->elem[--s->top-1];

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值