算法笔记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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值