如何验证数学表达式的正确性? 如:[3*(7-2)+5*0.1]/5-0.1+{2*9/3-1} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [3*(7-2)+5*0.1]/5-0.1+{2*9/3-1} this is a right case?first u should specify the rules...... 难度很大呀。用正则表达式不太好搞定吧?写表达式的逆波兰式,用两个堆栈:操作数堆栈sk1和运算符堆栈sk2.从左至右扫描表达式.如果扫描到的是操作数就压入sk1,否则(对运算符进行处理):1、如果当前运算符的优先级高于sk2顶的优先级,则当前运算符进栈;否则根据该运算符的性质(单目or双目等),从sk1中取操作数计算,并把结果压入sk1,然后继续该操作,直至当前运算符的优先级高于sk2顶的优先级2、对左、右括号要特别处理当扫到一个运算符的时候如果发现此时上次压栈的是运算符,那么肯定是错的,如果扫描完了堆栈中还有内容,那么说明表达式不完整,也是错的。当然错误条件不止这些,你可以再挖掘。 补充一句,可以参考一下这个:http://www.learnsky.com/bbs/printpage.asp?BoardID=6&ID=839例子是用vc实现的,转化成java就可以了,道理都是一样的。 纯java工程关于jar包的问题 求助关于正则表达式 如何用java实现珠算算法 来看看,GUI的问题,希望你们能解答. 一个小问题(关于.tld) 如何读取网络路径的文件?急! 如何将JTable上的值更新到数据库里 不想用数据库,想对文件内容,进行快速读取\查找 诸位大虾请帮忙? 新手的及其菜鸟问题!!!要分的进来!!!!!!! 一个JTextField的问题! 谁能帮忙解决这个DATE的问题,比较有挑战,急,谢谢!
first u should specify the rules......
写表达式的逆波兰式,用两个堆栈:操作数堆栈sk1和运算符堆栈sk2.
从左至右扫描表达式.如果扫描到的是操作数就压入sk1,否则(对运算符进行处理):
1、如果当前运算符的优先级高于sk2顶的优先级,则当前运算符进栈;否则根据该运算符的性质(单目or双目等),从sk1中取操作数计算,并把结果压入sk1,然后继续该操作,直至当前运算符的优先级高于sk2顶的优先级
2、对左、右括号要特别处理
当扫到一个运算符的时候如果发现此时上次压栈的是运算符,那么肯定是错的,如果扫描完了堆栈中还有内容,那么说明表达式不完整,也是错的。当然错误条件不止这些,你可以再挖掘。
http://www.learnsky.com/bbs/printpage.asp?BoardID=6&ID=839
例子是用vc实现的,转化成java就可以了,道理都是一样的。