算法笔记7.栈的应用:括号匹配

习题地址:http://codeup.cn/problem.php?cid=100000605&pid=1

1.注意:
若操作符为[,(,{,则直接入栈
若操作符为 ],),},则要跟[,(,{匹配 ,易错

#include <cstdio>
#include <stack> 
#include <string>
#include <iostream>
#include <stdlib.h>

using namespace std;

string str;
stack<char> s;

void judge(){
	
	bool flag = true;
	for(int i=0; i<str.length();i++){
		
		if(flag == false) break;		//若表达式非法,直接中止for循环 
		
		switch (str[i]){
			case '(':					//左括号直接入栈 
				s.push(str[i]);
				break;
			case '[':
				s.push(str[i]);
				break;
			case '{':
				s.push(str[i]);
				break;
			
			
			case ')':		
				if( !s.empty() && s.top() == '('){	//栈不空且匹配,先栈顶出栈	
					s.pop();						//注意:匹配是与 '(' ,此处易错! 
					break;
				}else{		//若不匹配,则 表达式非法 
					flag = false;
					break;
				}
			case ']':
				if( !s.empty() && s.top() == '[' ){
					s.pop();
					break;
				}else{
					flag = false;
					break;
				}
			case '}':
				if( !s.empty() &&s.top() == '{'){
					s.pop();
					break;
				}else{
					flag = false;
					break;
				}
			default	:		//若为其他则直接跳过 
				break;				
		}	
	}
	if(!s.empty() || flag == false) 
		printf("no\n");
	else 
		printf("yes\n");
}
int main(){
	
	int n;
	scanf("%d", &n);
	while(n--){
		
		str.clear();		//每次循环先清空str 
		while(!s.empty())	//清空栈 
			s.pop();
			
		cin>>str;		
		judge();
		 
	}	
	return 0;
}

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/qq_38300076/article/details/88621991
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞