Topic: 如何计算一个字符串表达式的值?

  Print this page

1.如何计算一个字符串表达式的值? Copy to clipboard
Posted by: sundy726
Posted on: 2003-03-30 02:37

如下:
String tmpstr ;
tmpstr = "1*2*3*4";

我的本意是想把运算表达式放在一个字符串变量中,然后在取得它的实际结果。
如果想得到tmpstr所表达的运算结果(24)的话,如何做到?
或者有什么其他的方法可以取代?

2.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: rainman
Posted on: 2003-03-30 03:32

写一个简单的parser咯。

3.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: jiangns3000
Posted on: 2003-03-30 10:20

学过编译吧,无论是一个简单的还是更复杂的表达式求值,都是一次课外作业。也是一个也许是经典的程序设计题。现在该知道有些理论知识还是重要的。以前不少人认为这些全是些无用的东西。当然这些都是题外话了。在JAVA中(JDK)没有现成的类用来进行这样的求值。你来写一个。

4.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: redfox
Posted on: 2003-03-31 10:12

可以用一个类SringToken,其用途是把一个字符串解析,中间以空格隔开,例如你可以把“1+2+4”写成“1 + 2 + 4”,这样系统
会把其解析成“1““+”“2”“+”“4”,然后用一个循环分别取变量和符号,计算结果

5.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: shsen
Posted on: 2003-03-31 16:33

编译原理

6.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: greenflute
Posted on: 2003-03-31 17:17

利用Java的Scripting功能吧,有Mozilla的Rhino,IBM的BSF,还有Jython...太多啦。

7.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: mochow
Posted on: 2003-03-31 18:56

用StringTokenizer把1*2*4这样的式子的数字分开,以*为分隔符。

经过一定的转化,就可以得到1,2,4等数字的String形式,转化为

int就可以计算了

8.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: jiangns3000
Posted on: 2003-03-31 19:30

String tmpstr ;
tmpstr = "1*(2+3)*4 - 5";
StringTokenizer如何做?

9.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: mochow
Posted on: 2003-03-31 19:50

看看StringTokenizer这个类的用法吧
用StringTokenizer分开1*2*3*4中的数字,以*为分隔符。
然后转化为String,接着转化为int计算即可

10.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: jiangns3000
Posted on: 2003-03-31 19:54

不对吧,(,),+,-,*有这么多运算符呢!

11.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: mochow
Posted on: 2003-03-31 22:29

哦,这个还没有考虑,呵呵

看来没初看起来那么简单哦

12.Re:如何计算一个字符串表达式的值? [Re: jiangns3000] Copy to clipboard
Posted by: snowbug
Posted on: 2003-03-31 23:32

jiangns3000 wrote:
不对吧,(,),+,-,*有这么多运算符呢!

这个问题不能用 stringtokenizer 之类的方法来解决。
其实在几乎所有计算机语言的教程里有关堆栈 (stack) 的章节都会有类似的习题。解决方法是使用两个堆栈,一个放操作数 (operand),另一个放操作符 (operator),把表达式改成post-order进行计算:
1*2+3/5 ==> 1 2 * 3 5 / +

具体操作请参考流行计算机语言的教科书的有关堆栈章节。

13.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: sundy726
Posted on: 2003-04-01 00:44

多谢各位了,我自己在考虑考虑

14.Re:如何计算一个字符串表达式的值? [Re: sundy726] Copy to clipboard
Posted by: mochow
Posted on: 2003-04-01 21:43

没错,数据结构的书里讲堆栈的时候就举的这个例子


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923