题意:判断输入是否为合法括号对
思路:基本思路就是使用栈进行字符的判断,如果输入左括号则压栈,如果是右括号且栈顶为左括号匹配则对,如果输入结束栈不为空则输出错误,否则输出正确
注意:空串也为合法输入,所以空串要单独判断
当输入为右括号时,如果栈为空则错误,所以要注意栈为空的判断
#include <stdio.h>
#include <stack>
#include <string>
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
cin.ignore();//为了识别空串,需要将之前的换行符忽略
string s;
stack<char> all;
for(int i=0;i<n;i++){
getline(cin,s);//使用getline可以识别空串
if(s!=""){
for(int j=0;j<s.length();j++){
if(!all.empty()){//当栈不为空时才可以往外弹出字符
if(s[j]==')'&&all.top()=='('){
all.pop();
}else
if(s[j]==']'&&all.top()=='['){
all.pop();
}else all.push(s[j]);//当字符不为右括号时压栈
}//栈为空时只可以压栈
else all.push(s[j]);
}
if(all.empty()){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
while(!all.empty()){//清空栈,为了下一次判断
all.pop();
}
}
}else{//当为空串时也正确输出
cout<<"Yes"<<endl;
}
}
}