输入n组字符串,测试三种括号{}、[]、(),顺序只能是前左括号,后右括号,括号间可以嵌套,若匹配输出yes,否则输出no
输入样例:
2
{a}【b】(d)
{[(]}
输出样例:
yes
no
注意:需加头文件
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
int n, k=0, len, flag=0; //flag标记是否有未匹配的括号
string s;
char b[20]; //存储括号
cin >> n;
while(n--)
{
cin >> s;
len = s.size();
for(int i=0;i<len;i++)
{
if(s[i]=='{' || s[i]=='[' || s[i]=='(') //存储左括号
{
b[k++] = s[i];
}
else if(s[i]=='}' && b[--k]=='{') //当遇到右括号是匹配掉一个左括号
{
b[k] = ' ';
}
else if(s[i]==']' && b[--k]=='[')
{
b[k] = ' ';
}
else if(s[i]==')' && b[--k]=='(')
{
b[k] = ' ';
}
}
for(int i=0;i<len;i++)
{
if(b[i]=='{' || b[i]=='[' || b[i]=='(' || b[i]=='}' || b[i]==']' || b[i]==')')
//当有未匹配的括号则不匹配
{
cout << "no" << endl;
flag++;
break;
}
}
if(flag == 0)
cout << "yes" << endl;
}
return 0;
}