【栈的应用】表达式求值

                                                           表达式求值

前言

就在上一周,我对表达式求值死磕(差不多打了1000多行吧),但还是没做对,我只得死等到周六,去把这道题问我那位万能的盆友,在那位盆友的只支持2种符号(+,)的基础上扩了一点代码把它改为4则运算(+,-,,/)但是只有49行!

关于思路

这道题在网上有很多题解,而且都在200多行左右,虽然人家有注释但是这么多你想理解人家的思路吗?所以越精简越好.
网上,书上,通常会定义数字栈和字符栈 在此项目中也需要定义两个栈.此题也利用了c++的特性,在循环中直接输入cin>>a; (完整:while(cin>>a))
循环中如果是*,/直接运算,如果是+,-将字符入字符栈,数字栈入刚输入的数.最后定一个循环,如果现在字符栈是+则计算此值与下一个值的和,减法也同理。

代码

#include <iostream>
using namespace std;
int s[1001];
char b[1001];
int main()
{

    int a,top=0,t=0;
    char k;
    cin>>a;
    s[0]=a;
    while(cin>>k)
    {
        cin>>a;
        if(k=='*')
        {
            s[top]=s[top]*a;
        }
        else if(k=='/')
        {  
            s[top]=s[top]/a; 
        }
        else
        {
            top++;
            s[top]=a;
        }
        if(k=='+'||k=='-')
        {
            t++;
            b[t]=k;


        }       
    }
    t++;
    for(;top>0;top--)
    {

        if(b[t]=='+')
        s[top-1]=s[top]+s[top-1];
        if(b[t]=='-')
        s[top-1]=s[top]+s[top-1];
        t--;
    }
    cout<<s[0];
    return 0;
}

!!!使用代码注意:此代码运行输入完输入换行之后需输入两次ctrl+D换行才会有结果(输入输出流不用).

转载于:https://www.cnblogs.com/smallfang/p/9278028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用实现表达式求值计算的步骤如下: 1. 创建两个,一个用于存储操作符的(称为运算符),一个用于存储操作数的(称为操作数)。 2. 从左到右遍历表达式的每个字符。 3. 如果当前字符是数字,则将其转化为对应的操作数,并将操作数压入操作数。 4. 如果当前字符是操作符,则进行以下操作: a. 如果运算符为空,或者当前运算符的优先级大于运算符顶运算符的优先级,将当前运算符压入运算符。 b. 否则,将运算符顶的运算符弹出,并从操作数弹出两个操作数进行运算,将运算结果压入操作数。重复此过程,直到当前运算符的优先级大于运算符顶运算符的优先级,然后将当前运算符压入运算符。 5. 当表达式遍历完毕后,如果运算符不为空,则从运算符弹出运算符,并从操作数弹出两个操作数进行运算,将运算结果压入操作数。重复此过程,直到运算符为空。 6. 最后,操作数的唯一元素即为表达式的求值结果。 参考资料: \[1\] 表达式求值基本理论过程 \[2\] 系统设计 \[3\] 各个模块的主要功能 #### 引用[.reference_title] - *1* [应用——表达式求值(整数基础版)](https://blog.csdn.net/qq_51340322/article/details/115262497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [数据结构课程设计---------用来实现表达式求值](https://blog.csdn.net/iteye_15968/article/details/82106487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值