673 - Parentheses Balance




  Parentheses Balance 

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

括号匹配问题,唯一要注意的地方就是:输入的行中间可能有空格

代码:

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main()
{
    int case_num;
	cin>>case_num;
	cin.ignore();
	while(case_num--){
		string seq;
		getline(cin,seq);
		stack<char> stk;
		bool flag=true;
		for(size_t i=0;i<seq.size();++i){
		   if(seq[i]=='(' || seq[i]=='[') stk.push(seq[i]);
		   else if(seq[i]==')') {
			   if(stk.empty()){
				   flag=false;
				   break;
			   }
			   char ch=stk.top();
			   stk.pop();
			   if(ch!='('){
				   flag=false;
				   break;
			   } 
		   }
		   else if(seq[i]==']') {
			   if(stk.empty()){
				   flag=false;
				   break;
			   }
			   char ch=stk.top();
			   stk.pop();
			   if(ch!='['){
				   flag=false;
				   break;
			   } 
		   }
		}
		if(!stk.empty()) flag=false;
		if(flag) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
}

你可能感兴趣的:(栈的简单应用)