用java实现能通过南洋理工学院acm在线评估的第二个练习——括号匹配
# include & ltcstdio & gt
# include & ltcstring & gt
# include & lt堆栈& gt
使用命名空间std
char str[10000+11];
int main()
{
int n,I,l;
scanf("%d ",& ampn);
while (n -)
{
memset(str,' 0 ',sizeof(str));//将数组清零。
scanf("%s ",str);
l = strlen(str);
堆栈& ltchar & gtstk
bool ans = true
for(I = 0;我& ltl;i++)
{
If(str[I]= = '(' | | str[I]= '[')//如果要输入的字符是前括号,那么就输入,即使最后只剩下一个,也不是空的,而是没有。
STK . push(str[I]);
Else if (str[i] == ')')//要输入的字符是括号。如果此时堆栈为空,这是第一个字符,那么肯定会失败。干脆退出循环,唉。
{
if (stk.empty())
{
STK . push(str[I]);
打破;
}
埃尔塞夫(STK。top()= '(')//如果此时栈顶是匹配的前括号,那么删除栈顶,不需要输入将要输入的内容。两次殉情。
STK . pop();
其他
{
ans =假;//其他任何情况,比如这个时候栈里有一个元素,但是栈顶不匹配,那就悲哀了。别敲了,假的,跑。
打破;
}
}
else if (str[i] == ']')
{
if (stk.empty())
{
STK . push(str[I]);
打破;
}
else if (stk.top() == '[')
STK . pop();
其他
{
ans =假;
打破;
}
}
}
如果(!stk.empty())?//栈为空,非空的都为假。
ans =假;
如果(答案)
printf(" Yes \ n ");
其他
printf(" No \ n ");
}
返回0;
}点击打开链接。