括号匹配问题
--最开始的思路是用两个栈分别保存前括号 与 后括号 但是遇到了蜜汁编译错误...现在暂时不懂原因
然后思路就是遇到前括号就直接压入栈中,对比栈顶与后一个括号是否匹配。
若匹配,则弹出。
最后检查栈里是否还有元素。
#include <stdio.h>
#include <stack>
#include <string.h>
using namespace std;
int bijiao(char a,char b)
{
if (a=='('&&b==')')
return 1;
else if (a=='['&&b==']')
return 1;
else
return 0;
}
int main()
{
int n,i,flag=0;
char ch,cs[300];
scanf("%d",&n);
getchar();
while (n--)
{
flag = 0;
stack <char> fir;
//stack <char> sec;
fgets(cs,300,stdin);//fgets会读入回车符
if (cs[0]=='\n')
{
printf("Yes\n");
continue;
}
int l = strlen(cs)-1;
for (i=0;i<l;i++)
{
ch = cs [i];
if (ch!='['&&ch!=']'&&ch!='('&&ch!=')')
{
flag = 1;
break;
}
}
if (l%2)
{
printf("No\n");
continue;
}
for(i=0;i<l;i++)
{
if (cs[i]=='('||cs[i]=='[')
{
fir.push(cs[i]);
}
if (fir.empty())//解决 )(情况 异常
continue;
char t = fir.top();
if (bijiao(t,cs[i])&&!fir.empty())
fir.pop();
}
if (fir.empty()&&flag!=1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}