A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

5 个回复

倒序浏览

你是指计算这样的式子?1+-2 这种么?无法判读,会报错,当然有括号的话就不会有问题了
回复 使用道具 举报
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))形式的表达式。
回复 使用道具 举报
围观学习一下。。。。
回复 使用道具 举报
geekgoami 发表于 2015-6-26 08:29
在ubuntu下面的计算器是允许的,而且它允许在textField中输入任何字符,包括粘贴中文。所以它并不单单只 ...

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