您的位置:首页 > 其它

关于对计算2.0的创作思想

2013-01-05 00:00 127 查看
对于本计算器,存储的每个运算符或者操作数均是适用string结构。

首先读取函数input接受一个带空格的中缀表达式(这么做我也是为了解决负号和减号混合的问题)例如:

2 + -3(其中’-‘和’3‘之间是没有空格的,而‘+’前后均有一个空格);然后将其存储在string m_s_str[100]数组结构中,例如’2‘->str[0]

’+‘->str[1] ’3‘ –>str[2];

存储好后由一个函数将其转换为后缀表达式并将其存储在string m_s_p_str[xx];结构中。

在类 calculate中还提供了一个out_print函数该函数输出后缀表达式的内容并把他设置为public属性。

但是对于中缀表达式转换为后缀表达式都是基于双目运算符的表示,对于单目运算符又该如何呢?

这里提供了一个比较有意思的思想(当然好坏由各位看官来裁定了,我李惟其不敢妄自吹嘘的)

就是将单目运算符也转为双目运算符来处理。也就是在前面添加了一个废弃的1而已了。

但是值得思考的是单目运算符分为两种,前缀和后缀。前缀如sin,后缀如! 阶乘。所以这个1还真能随便乱加了,你的考虑如何将其加入合适的位置。前缀应该加在前面,后缀应该加在后面。

在处理完后完全可以再计算两个运算的函数中丢弃这个1了。

该计算器为了方便处理在一开始的时候就将一些字符串的运算符全部转换为字符。

大概的含义如下:

'a': //sin

'b': //cos
'c': //tan
'A': //asin
'B': //acos
'C': //atan
'G': //根号
'!': //阶乘
'^': //次方
'l': //ln运算符
'L': //lg运算符

至于为什么这么这么做(好吧只能说明我懒了)?因为一开就完全处理好到后面的函数处理中就会很方便了。

好吧今天就暂时写在这里吧。我的邮箱是wcmxiaolizi@foxmail.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: