如果我想检查一个字符串是否有用括号,我可以使用这个简单的代码:
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
我的问题是 - 我认为这段代码做得很好,但我看到一些使用堆栈的实现.这是为什么?使用堆栈是否能够处理更详细的案例?
如果只是平衡括号,使用堆栈具有以下优点:
您可以将用户指向未闭合括号的偏移量;
您可以平衡不同类型的分组运算符如[]
,{}
和()
并验证它们是否正确嵌套.
请注意,如果要支持字符串,字符,正则表达式文字和可能的注释,则可能需要更仔细地解析字符串.
如果您只想检查不匹配的括号,则不需要创建堆栈,您的代码就可以了.如果要解析表达式(例如数学),您肯定需要一堆字符来推送运算符和括号.阅读本文以获取更多信息.