当前位置:  开发笔记 > 编程语言 > 正文

平衡括号 - 当堆栈是强制性的?

如何解决《平衡括号-当堆栈是强制性的?》经验,为你挑选了2个好方法。

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

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

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



1> chqrlie..:

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

您可以将用户指向未闭合括号的偏移量;

您可以平衡不同类型的分组运算符如[],{}()并验证它们是否正确嵌套.

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



2> Iharob Al As..:

如果您只想检查不匹配的括号,则不需要创建堆栈,您的代码就可以了.如果要解析表达式(例如数学),您肯定需要一堆字符来推送运算符和括号.阅读本文以获取更多信息.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有