![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7633a79bd2940e00fe0167e319fffdda.png)
- 匹配上还要判断,如果最早找到’[’ ,这个’)’ 就没匹配
- 从当前右括号往前找,找个线性数组标记有没有匹配上
using namespace std;
#include <iostream>
#include <cstring>
char a[200];
int f[200];//标记1表示匹配上,0表示未匹配上,全局变量固定是1
int main ()
{
int i,j;
cin>>a;
for(i=0;i<strlen(a);i++)
{
//右括号匹配
if(a[i]==')')
{
//往前找匹配
for(j=i-1;j>=0;j--)
{
//如果找到了对应的没标记的(,标记两个为1,break
if(a[j]=='('&&f[j]==0)
{
f[j]=1;
f[i]=1;
break;
}
//!!!如果最早找到'[' ,这个')' 就没匹配
else if(a[j]=='['&&f[j]==0)
{
break;
}
}
}
// 与上同理
if(a[i]==']')
{
for(j=i-1;j>=0;j--)
{
if(a[j]=='['&&f[j]==0)
{
f[j]=1;
f[i]=1;
break;
}
else if(a[j]=='('&&f[j]==0)
{
break;
}
}
}
}
/*for(i=0;i<strlen(a);i++)
{
cout<<f[i];
}
cout<<endl; */
for(i=0;i<strlen(a);i++)
{
//匹配上就直接输出了
if(f[i]==1)
{
cout<<a[i];
}
// 没匹配上,直接输出一对,剩下的匹配一下
else
{
if(a[i]=='('||a[i]==')')
{
cout<<"()";
}
else
{
cout<<"[]";
}
}
}
}