黑马程序员技术交流社区

标题: 计算器中,单目运算符与多目运算符的判断问题。 [打印本页]

作者: geekgoami    时间: 2015-6-25 09:57
标题: 计算器中,单目运算符与多目运算符的判断问题。
相信大家都见过ubuntu下面的计算器,是支持各种符号输入的。而在一般的公司都要求首先编写一个计算器。
如果允许在+-*/后面带上+-(正负号),这个时候怎么在字符栈中判断+-到底是正负还是运算符加减?特别是在括号前加两个+-。
本人百思不得其解。第一次提问,不知道在这里提问是不是算违规,恳请版主手下留情。
作者: guiqulaixi    时间: 2015-6-25 14:33

你是指计算这样的式子?1+-2 这种么?无法判读,会报错,当然有括号的话就不会有问题了
作者: geekgoami    时间: 2015-6-26 08:29
guiqulaixi 发表于 2015-6-25 14:33
你是指计算这样的式子?1+-2 这种么?无法判读,会报错,当然有括号的话就不会有问题了 ...

在ubuntu下面的计算器是允许的,而且它允许在textField中输入任何字符,包括粘贴中文。所以它并不单单只是一个能够计算正确数学表达式的计算器,而且需要判断是否合法。
1+-2会被解析为:1+(-2)。这种情况倒是简单,可以先将字符串解析为:
int firstNum = 1;
int secondNum = -2;
int funPlus(firstNum ,secondNum);的形式

难就难在:例如1+-(4^-6+-(5*-7))形式的表达式。
作者: 黑马无敌    时间: 2015-6-26 08:56
围观学习一下。。。。
作者: guiqulaixi    时间: 2015-6-26 09:12
geekgoami 发表于 2015-6-26 08:29
在ubuntu下面的计算器是允许的,而且它允许在textField中输入任何字符,包括粘贴中文。所以它并不单单只 ...

是这样的话,既然可以处理1+-2的话 那么应该可以处理更为复杂的式子,我的一个猜想是:可以加一个变量记录上一次取到的字符,每次取到一个字符就与之前的进行对比,这样取到两次都是符号的情况就可以被知道,那么第二次取到的符号的范围在-+之间就可以把它当做正负号处理,同时应该也可以起到一定的检查作用吧  
作者: guiqulaixi    时间: 2015-6-26 09:17
还有一种 也许可以定义一种上下文无关文法,这个规则能够描述这样的表达式。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2