其实这道很水,但相信小白都难在([)]例子上面吧!这个可以通过栈顶匹配来解决,代码如下:
#include<iostream>
#include<stack>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
stack<char>a;
char b[1000];
gets(b);
int l=strlen(b),flag=0;
for(int i=0;i<=l;i++)
{
switch(b[i])
{
case'(':a.push(b[i]);flag++;break;//左括号就入栈,未匹配对数加一
case'[':a.push(b[i]);flag++;break;//左括号就入栈,未匹配对数加一
case')':if(a.empty()!=true&&a.top()=='('){a.pop();flag--;break;}else{cout<<"Wrong";return 0;}//如果是右括号就匹配,匹配不成功直接输出Wrong,成功的话如果栈不为空,未匹配对数减一,左括号出栈
case']':if(a.empty()!=true&&a.top()=='['){a.pop();flag--;break;}else{cout<<"Wrong";return 0;}//如果是右括号就匹配,匹配不成功直接输出Wrong,成功的话如果栈不为空,未匹配对数减一,左括号出栈
}
}
if(flag==0)
{
cout<<"OK";
}
else cout<<"Wrong";//有落单的就排除
return 0;
}