c# - 存储大括号之间元素数量的好方法?

标签 c# algorithm

给定一个输入

a { b c d { e f } g }

我想一次解析一个标记(字母或大括号)。当我击中第一个右括号时 }我需要知道自最后一个左大括号(e 和 f = 2)以来有多少元素。然后当我击中那个之后的那个时,我需要 4 (b,c,d,g)。

一个一个地捕获 token 很容易,但是......我不知道如何计算它们。我在想 Stack<int>但我不能修改顶部元素来增加它?

最佳答案

与其尝试修改顶部元素,不如将 那个 保留在 int 变量中。

  • 当您看到左大括号时,将“到目前为止的计数”压入堆栈,并将计数设置为 0。
  • 当您看到一封信时,增加“到目前为止的计数”
  • 当您看到右大括号时,对计数进行任何您需要的操作,然后弹出堆栈以获得新的“到目前为止的计数”值

编辑:如果您想将所有状态保留在堆栈本身中,您总是可以将顶部元素视为一个变量,它通过执行 pop-increment-push 来改变。此时,操作是:

  • 左大括号:推 0
  • 字母:pop-increment-push
  • 右大括号:弹出,在它永远消失之前随心所欲地使用值

这可能效率稍低,但我认为它实际上更优雅。

关于c# - 存储大括号之间元素数量的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002750/

相关文章:

c - 搜索元素的有效方法

algorithm - 平面上非相交圆盘运动的路径生成

c# - 从 WatiN 中选择不更新 knockout View 模型

c# - 如何在 Unity 中按下一个键时增加计数器?

c# - 在 jQuery.get 到 MVC Controller 操作后重新加载页面

python - 用于计算正态分布标准偏差的标准 C 或 Python 库

python - 加快 groupby.apply pandas 匹配

c++ - 计算成员值时 vector 的奇怪问题

c# - Crystal 报表 : Showing Single Column Data into Rows of Multiple Columns

c# - "button_click"没有重载匹配委托(delegate) 'System.EventHandler'