平衡的括号(Parentheses Balance, UVa 673)

You are given a string consisting of parentheses () and []. A string of this type is said to be correct:
(a) if it is the empty string
(b) if A and B are correct, AB is correct,
(c) if A is correct, (A ) and [A ] is correct.
Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.

Input

The file contains a positive integer n and a sequence of n strings of parentheses () and [], one string a line.

Output

A sequence of Yes or No on the output file.

Sample Input

3
( [ ] )
( ( [ ( ) ] ) ) )
( [ ( ) [ ] ( ) ] ) ( )

Sample Output

Yes
No
Yes



题目很简单,用数组或者string遍历或者stack都可以,主要是要注意下用cin和getline组合是产生的那个回车问题
以下是未评测代码
#include<iostream>
#include<string>
#include<fstream>
#include<vector> 
#include<iomanip> 
#include<stack> 
#include<list>
#include<algorithm>
using namespace std; 
int main(){
	int n;
	cin>>n;
	cin.ignore();
	/*getline(cin,str)的读取原理是将以'\n'为结束符做为一完整读取的一行,'\n'会读。
	所以当之前用cin读取一个字符的时候,你会输入一个字符然后点击回车,那么下面getline(cin,str)读的时候会读入这个回车,并判断结束了。
	如果此处不使用cin.ignore()会造成下面读的第一个字符串就是一个空串,从而导致输出结果多一个Yes 
	*/
	for(int k = 0 ;k<n;k++){
	string s;
	getline(cin,s);
	int b1 =0,b2=0;
	stack<char> st;
	for(int i =0;i<s.length();i++){
		st.push(s[i]);
	}
	 if(!st.empty()){
		while(!st.empty()){
		if(st.top()==']'){
			b1++;
			st.pop();
		} 
		else if(st.top()==')'){
			b2++;
			st.pop();
		}
		else if(st.top()=='('){
			b2--;
			st.pop();
			
		}
		else if(st.top()=='['){
			b1--;
			st.pop();
		}
		if(st.empty())break;
		else st.pop();
	}
	if(b1==0&&b2==0)cout<<"Yes"<<endl;
	 else cout<<"No"<<endl; 
	}
	else{
		cout<<"Yes"<<endl;//空串情况 
	}
	while(!st.empty())//清空一下内存空间 
         st.pop();
}
	return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值