将字符串转化成计算表达式

近来在项目中要实现一个 将字符串转化成计算表达式的问题, 很是费解:

 

String formStr = "[01]+[02]+[03]";

 

一开始的做法是将String转化成JS表达式在页面中进行计算,

用JS实现较容易, 因为JS支持动态变量命令。

 

resb.append("var result = item_1+item_2+item_3");

将[01] [02] [03] 替换成 item_1 item_2 item_3

 

item_1 = ?

item_2 = ?

item_3 = ?

 

然而在Java中 问题可复杂了。  Google了一下, 找到解决思路了。

 

对, 用栈来实现。

 

====================================

 

 

计算机在处理算术表达式时,首先将其转换 为后缀表达式。

例如,表达式“46+5*(120-37)”的后缀表达式形式为 “46 5 120 37 - * +”。 


     计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;

遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中,重复以上过程,

直到后缀表达式扫描结束。例如,后缀表达式 “46 5 120 37 - * +”的计算过程为: 


      a. 依次将46、5、120、37 压入栈中; 
  b. 遇到 “-”,取出37、120,计算 120–37,得 83,将其压入栈中; 
      c. 遇到 “*”,取出83、5,计算5*83,得 415,将其压入栈中; 
      d. 遇到 “+”,取出415、46,计算46+415,得 461,将其压入栈中; 
      e. 表达式结束,则计算过程完成。 


      函数computing(char expr[],int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数result 返回该值。函数的返回值为-1/0分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减 (“-”)、乘 (“*”)、除(“/”)。 

      函数computing中所用栈的基本操作的函数原型说明如下: 


  void InitStack (STACK *s):初始化栈。 
  void Push(STACK *s, int e): 将一个整数压栈,栈中元素数目增 1。 
  void Pop(STACK *s):栈顶元素出栈,栈中元素数目减 1。 
      int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。 
      int IsEmpty(STACK s):若s是空栈,则返回 1否则返回 0。 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值