Parentheses Balance
Parentheses Balance |
You are given a string consisting of parentheses () and []. A string of this type is said to becorrect:
- (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<cstdio>
#include <stack>
#include <cstring>
using namespace std;
int main()
{
int i,j,k;
int T;
cin>>T;
getchar();
while (T--)
{
string s ;
stack<char> Chr;
getline(cin,s); //不能用gets,要用getline,并且getline输入的字符串必须是string形式
int L=s.size();//并且每个"("和"["都有与之对应的")"和"]"
Chr.push('0');//利用中间变量来判断什么时候满足条件
for (i=0;i<L;i++)
{
if (s[i]=='(' || s[i]=='[')
Chr.push(s[i]);
else if (s[i]==')')
{
if (Chr.top()=='(')
Chr.pop();
else
Chr.push('1');
}
else
{
if (Chr.top()=='[')
Chr.pop();
else
Chr.push('1');
}
}
printf(Chr.top()=='0'?"Yes\n":"No\n");
}
return 0;
}