给定一个输入
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/