给你一堆括号,判断他是否是匹配好了的。例如:{([] [])},属于匹配成功。而()[)}属于匹配失败。
下面我们开始考虑匹配失败的情况
1)括号种类本身就不匹配,比如(]。
2)左括号的个数小于右括号 的个数。{[()]]}
3)左括号的个数多于右括号的个数。{[(()]}
#include <iostream>
#include<cstdio>
#include<malloc.h>
#include<stack>
using namespace std;
int main()
{
stack<char>sta;
int flag=1;
char a,temp;
while((a=getchar())!='\n')
{
switch (a)
{
case '{':
sta.push(a);
break;
case '(':
sta.push(a);
break;
case '[':
sta.push(a);;
break;
case ')':
if(!(sta.empty()))
{
temp=sta.top();
sta.pop();
if(temp!='(')
flag=0;
}
else
{
flag=0;
};
break;
case ']':
if(!(sta.empty()))
{
temp=sta.top();
sta.pop();
if(temp!='[')
flag=0;
}
else
{
flag=0;
};
break;
case '}':
if(!(sta.empty()))
{
temp=sta.top();
sta.pop();
if(temp!='{')
flag=0;
}
else
{
flag=0;
};
break;
}
}
if(!sta.empty())
flag=0;
if(flag)
printf("匹配成功\n");
else
printf("匹配失败\n");
return 0;
}
这里用到了STL 的只是,头文件是#include<stack>。自定义栈等后来再加吧。