c - 平衡括号 - 什么时候堆栈是强制性的?

标签 c algorithm

<分区>

如果我想检查一个字符串是否使用了有效的括号,我可以使用这个简单的代码:

int counter = 0;
for(int i = 0; i < length_of_string; i++){
    if(string[i] == '(' )
       counter++;
    else if(string[i] == ')' )    // string is a char array
       counter--;
    if(counter < 0)
       return -1; // error because the ')' should come AFTER '('
}
if(counter == 0)
     return 0; // the string is OK
else
     return -1; // unbalanced

我的问题是 - 我认为这段代码做得很好,但我已经看到一些使用堆栈的实现。这是为什么?使用堆栈是否让我能够处理更复杂的案例?

最佳答案

如果只是为了平衡括号,使用堆栈有以下优点:

  • 您可以将用户指向未闭合括号的偏移量;
  • 您可以平衡不同类型的分组运算符,例如 []{}() 并验证它们是否正确嵌套。

请注意,如果您想支持字符串、字符、正则表达式文字和可能的注释,您可能需要更仔细地解析您的字符串。

关于c - 平衡括号 - 什么时候堆栈是强制性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577418/

相关文章:

algorithm - 如果我采用 max(abs(m) 或 max(m),有什么区别?

java - 使用 Minimax 算法的 NIM 游戏和 AI 玩家 - AI 会输棋

c - C 语言编程中为什么要把变量名括在括号内?

c++ - PCC-F-02102,在 AIX 5.3 中进行 C 预处理时出现 fatal error

c++ - 以明显的方式反转位

java - 图着色算法 : typical scheduling problem

c++ - 使用递归计算一个函数的高度和大小?

比较 Haskell 和 C 计算素数的速度

c - 为什么 Apple 根据平台将 UInt32 定义为 long 或 int?

python - 无需共享数据的快速/简单数组比较算法