请教一个很菜的问题(有关于堆栈)!!

fatapple 2002-01-30 12:39:04
我先做一个十分简单的计算器,能实现括号,和一些简单的函数,如:abs,sqr等。
要求: 输入一个式子 如:abs(5+6*9/8(4+89*8)) = 可以求出答案 。
问题:
对于式子,如何判断什么是数字,什么是运算符或函数,从而分别将数字和运算符入不同的堆栈。由于数字可以是多位的,若将式子看成字符串,如何分辨两位数,三位数,以及abs,sqr等函数。

...全文
89 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyfly 2002-08-22
  • 打赏
  • 举报
回复
yanwl(海天孤燕)我也想要一个。yy-fly@163.com
yanwl 2002-01-31
  • 打赏
  • 举报
回复
程序已发
fatapple 2002-01-30
  • 打赏
  • 举报
回复
li_wennian@sohu.com
fatapple 2002-01-30
  • 打赏
  • 举报
回复
我是fatapple,很谢谢大家对我的帮助,我的mail 是 li_wennian@sohu.com
如果有源程序的话清发给我!!!
万分感谢!!
yanwl 2002-01-30
  • 打赏
  • 举报
回复
对于中缀表达式的运算,可以用两个堆栈来实现。一个为数栈,存放操作数,一个为符号栈存放操作复。顺序读取表达式:
1、如果当前读到的是数,就将其入数栈
2、如果当前读到的是符号,那么将其与符号栈顶的元素进行优先级比较。
3、若栈顶优先级较小,则将读到的符号直接入栈
否则从数栈弹出两个数,同时将栈顶符号弹出,将其与弹出的数操作,并把操作结果入数栈,再把当前读到的符号入栈。
4、如果读到表达式的末尾,就清空符号栈,数栈中保留的就是最后的结果。

这样就可以了,这种问题直接解说不便,如果不太懂的话,不妨留下mail,我这里有以前做过的计算器的源代码,那个计算器可以实现常规的科学计算器的各种功能,用C语言编写,有兴趣的话我可以发给你。
ulovem 2002-01-30
  • 打赏
  • 举报
回复
我刚看了一下《数据结构》上面好像有这样的例子,不过写得很马虎,要用两个栈,一个用来存放操作数,一个用来存放运算符,我也没太懂,你不妨去看看
pploveshao 2002-01-30
  • 打赏
  • 举报
回复
没有学过學過編譯原理吧,呵呵!
cky2 2002-01-30
  • 打赏
  • 举报
回复
找本数据结构的书,上面一般都有这样的例子
luty 2002-01-30
  • 打赏
  • 举报
回复
你用assic码一比较就知道了,设定可输入字符的范围.
cococut 2002-01-30
  • 打赏
  • 举报
回复
用两个堆栈,一个是原算符,一个是数字!其实data stucture with c++一书上有这样的例子,不妨参考一下!

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧