Problem Description
任意输入一个由若干个圆括号、方括号和花括号组成的字符串,设计一个算法判断该串中的括号是否配对。
Input
有多组数据,每组为一个包含3类括号的字符串,串长不超过100。
Output
若该串中的括号匹配输出1,否则输出0。
Sample Input
([{}]) ([{}}) ([{)]}
Sample Output
1 0 0
#include <iostream>
#include<stdio.h>
#include<string.h>
const int MAX=101;
using namespace std;
class Stack {
public:
int top;
char data[MAX];
public:
Stack() {
top=-1;
}
void push(int c) {
if(top!=MAX-1) {
data[++top]=c;
}
}
char pop() {
int c='\0';
if(top!=-1) {
c=data[top--];
}
return c;
}
char getTop() {
if(top!=-1)
return data[top];
else
return -999;
}
bool isEmpty() {
return top==-1?true:false;
}
void print() {
for(int i=0; i<top+1; i++)
cout<<data[i]<<" ";
cout<<endl;
}
};
int main() {
char str[MAX];
while(cin>>str) {
Stack stack;
int flag=1;
int i=0;
int n=strlen(str);
while(i<n&&flag) {
if(str[i]=='{'||str[i]=='('||str[i]=='[') {
stack.push(str[i]);
} else {
switch(str[i]) {
case ')':
if(stack.top==-1||stack.pop()!='(')flag=0;
break;
case ']':
if(stack.top==-1||stack.pop()!='[')flag=0;
break;
case '}':
if(stack.top==-1||stack.pop()!='{')flag=0;
break;
}
}
i++;
}
if(stack.top!=-1)flag=0;
if(flag)
cout<<"1"<<endl;
else
cout<<"0"<<endl;
}
return 0;
}