用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;

}点击打开链接。