后缀表示法验证?

时间:2009-04-25 22:28:33

标签: validation postfix-notation

评估包含后缀表达式(例如:3 5 +)的字符串(数组,某些东西)来检查有效性的好方法是什么?

3 个答案:

答案 0 :(得分:12)

我在这里假设有效的意思是执行代码永远不会使堆栈下溢并在堆栈上留下一个值。如果你有更严格的有效性概念,你需要一个更复杂的检查器。

如果要检查此类有效性,则无需评估字符串,您可以使用计数器,而不是堆栈。计数器跟踪您评估时堆栈上的值的数量。为简化起见,假设您只有文字,二元运算符和一元运算符。此算法使用特殊的减量操作:如果减量时计数器低于零,则字符串无效:

  1. 将计数器初始化为0.
  2. 当您看到文字时,请递增计数器。
  3. 当您看到二元运算符时,将计数器递减两次,然后递增它。
  4. 当您看到一元运算符时,递减计数器,然后递增它。
  5. 在字符串的末尾,如果计数器为1,如果它从未低于0,则该字符串有效。

答案 1 :(得分:1)

算法:维护堆栈并扫描 后缀表达式从左到右 - 如果元素是数字,请将其推入 堆 - 如果元素是运算符O,则弹出两次 分别得到A和B.计算 BOA并将其推回堆栈 - 表达式结束时,数字 在堆栈中是最终的答案

//对于有效性如果在Stack中只剩下一个数字,那么它的正确表达式

//如果您在堆栈中留下多个数字而没有运算符则错误

//如果堆栈中有一个或没有数字,那么运算符就会错误

答案 2 :(得分:0)

检查后缀表达式是否有效:(如果输入在char数组中) 1.操作数的数量必须等于否。运营商+ 1。        要检查这个,请保留一个检查变量。        检查= 0。为每个操作数递增此值并为每个操作符递减。如果它的值最终为1,则表达式有效。

2.数组的前2个元素需要是操作数。没有后缀表达式可以将operator作为第1或第2个元素。        请通过if control语句检查。