2023-09-14 11:53

基于栈实现的括号匹配功能

wanmatea

其它

(415)

(0)

收藏

在编写程序的过程中,我们经常会遇到诸如圆括号“()”与花括号“{}”,这些符号都必须是左右匹配的,这就是我们所说的符合匹配类型,当然符合不仅需要个数相等,而且需要先左后右的依次出现,否则就不符合匹配规则,如“)(”,明显是错误的匹配,而“()”才是正确的匹配。有时候符合如括号还会嵌套出现,如“9-(5+(5+1))”,而嵌套的匹配原则是一个右括号与其前面最近的一个括号匹配,事实上编译器帮我检查语法错误是也是执行一样的匹配原理,而这一系列操作都需要借助栈来完成,接下来我们使用栈来实现括号”()”是否匹配的检测。

判断原则如下(str=”((5-3)*8-2)”):

 

1.设置str是一个表达式字符串,从左到右依次对字符串str中的每个字符char进行语法检测,如果char是左括号则入栈,如果char是右括号则出栈(有一对匹配就可以去匹配一个左括号,因此可以出栈),若此时出栈的字符char为左括号,则说明这一对括号匹配正常,如果此时栈为空或者出栈字符不为左括号,则表示缺少与char匹配的左括号,即目前不完整。

2.重复执行a操作,直到str检测结束,如果此时栈为空,则全部括号匹配,如果栈中还有左括号,是说明缺少右括号。

 

public static void main(String[] args) {
String str="((5-3)*8-2)";
Stack<String> stack = new Stack<>();
boolean flag=true;
for(int i=0;i<str.length();i++) {
char ch=str.charAt(i);
if(ch=='(')
{
//左括号入栈
stack.push(ch+"");
}
else if(ch==')') {
if(stack.isEmpty()||!stack.pop().equals("("))
flag=false;
}
}
if(flag&&stack.isEmpty()) {
System.out.println("检查通过");
}
else {
System.out.println("检查失败");
}
}


0条评论

点击登录参与评论