后缀表达式求值

任务描述:

1.从文件读取表达式,判断表达式是否合理;

2.将表达式转为后缀形式;

3.求值

解决方案:

一.文件读取:

FILE fp;//文件指针
fp = fopen("demo.txt","r");
char expr[20] = {0};
char c;
int i = 0;
while( (c = fgetc(fp) != EOF){//读到文件末尾时返回的是EOF
     expr[i] = c;
     i++;
}

二.判断是否合理见 https://blog.csdn.net/lvdoujack/article/details/91491556

三.中缀形式转后缀形式:

1.数字直接保存进后缀表达式

2.操作符需要判断

(1)栈空则入栈;

(2)栈非空则比较当前op和栈顶op的优先级

    当前  ‘(’   大于所有栈顶op;

    当前   ‘)’   等于  栈顶  '('   ,小于其它栈顶op;

    当前op与栈顶op同级时,当前op小于栈顶op;

    当前op是  +  -  小于  栈顶*/

    当前op是  *  /  大于   栈顶+-

(3)判断结果做处理

大于:当前op入栈

等于:此时为左右括号相遇,将栈顶op弹出且当前op不作处理

小于:栈顶op出栈并且存入后缀表达式,当前op继续与新的栈顶op比较。

3.扫描完成后若栈非空则依次出栈存入后缀表达式

四.后缀表达式求值

1.遍历后缀表达式

2.遇见数字时入栈

3.遇见操作符时依次出栈操作数b,a做运算a   op   b,结果入栈

4.遍历完成后栈内的那个元素即是结果

 

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值