表达式输完后按'='结束输入,开始运算
算法我已经搞定了,就是图形界面有点麻烦了
只许用c++, API
怎样让数字和运算符从右向左显示,帮忙想个办法啊
9 个解决方案
#1
你好,我最近也在搞这个,却苦于一直不懂啊,不懂就问!你能把算法跟我说说吗?谢谢你了~(我读不懂大段大段的程序的)
#2
建两个栈,一个符号栈,一个运算数栈,
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
#3
错了假设‘*’在外为4,‘+’在外为2,‘*’在内为5,‘+’在内为3,
#4
什么平台呀?Solairs下的图形工具我倒是有,我最近也在做这个,哈哈,我已经看了一周了,也还没有看明白怎么实现的。(我比较笨)
#5
建两个栈,一个符号栈,一个运算数栈,
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
请问如果加入左右括号怎么办?为什么要区分栈内栈外呢?这是标准算法吗?
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
请问如果加入左右括号怎么办?为什么要区分栈内栈外呢?这是标准算法吗?
#6
左括号栈外优先级较高,一来就进栈,但栈内优先级较低
右括号栈外优先级较低,一来就弹出栈内符号运算,直到遇到左括号
右括号栈外优先级较低,一来就弹出栈内符号运算,直到遇到左括号
#7
我们现在用的Borland C++ 编译器5.5版。
用个记事本写完程序,直接编译
用个记事本写完程序,直接编译
#8
我明天考试,明天会把这个认真看的,这个算法我问了老师两遍没有得到解答,如果我看不懂,希望到时候还能得到你的指点,我想我还不算很笨的,谢谢了~
#9
请问如何定义各种符号的优先级啊?我没太多经验的......能否再详细一点呢
或者可以贴出代码让我看看吗?
或者可以贴出代码让我看看吗?
#1
你好,我最近也在搞这个,却苦于一直不懂啊,不懂就问!你能把算法跟我说说吗?谢谢你了~(我读不懂大段大段的程序的)
#2
建两个栈,一个符号栈,一个运算数栈,
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
#3
错了假设‘*’在外为4,‘+’在外为2,‘*’在内为5,‘+’在内为3,
#4
什么平台呀?Solairs下的图形工具我倒是有,我最近也在做这个,哈哈,我已经看了一周了,也还没有看明白怎么实现的。(我比较笨)
#5
建两个栈,一个符号栈,一个运算数栈,
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
请问如果加入左右括号怎么办?为什么要区分栈内栈外呢?这是标准算法吗?
运算符设置优先级,比如‘*’栈外优先级为4,‘+’栈外优先级为3,‘*’栈内优先级为5,‘+’栈外优先级为4,当扫描到栈外是‘*’,栈内是‘+’,栈外比栈内符号优先级高时,就直接进符号栈,要是栈外是‘+’,栈内是‘*’,就把栈内‘*’弹出,并从数据栈取两个运算数进行运算,结果存进数据栈,依次类推,最后‘=’优先级最底,全部弹出,结束计算。
请问如果加入左右括号怎么办?为什么要区分栈内栈外呢?这是标准算法吗?
#6
左括号栈外优先级较高,一来就进栈,但栈内优先级较低
右括号栈外优先级较低,一来就弹出栈内符号运算,直到遇到左括号
右括号栈外优先级较低,一来就弹出栈内符号运算,直到遇到左括号
#7
我们现在用的Borland C++ 编译器5.5版。
用个记事本写完程序,直接编译
用个记事本写完程序,直接编译
#8
我明天考试,明天会把这个认真看的,这个算法我问了老师两遍没有得到解答,如果我看不懂,希望到时候还能得到你的指点,我想我还不算很笨的,谢谢了~
#9
请问如何定义各种符号的优先级啊?我没太多经验的......能否再详细一点呢
或者可以贴出代码让我看看吗?
或者可以贴出代码让我看看吗?