lelaimc @ 2024-09-29 13:25:18
#include<bits/stdc++.h>
using namespace std;
struct Node{
string a;
int flag;
}w[101];
int main()
{
string s;
cin>>s;
for(int i=0;i<=101;i++)
w[i].flag=0;
for(int i=0;i<s.size();i++)
{
w[i].a=s[i];
if((s[i]==')')||(s[i]==']'))
{
for(int p=i-1;p>=0;p--)
{
if((w[p].flag==0)&&((s[p]=='(')||(s[p]=='[')))
{
if((s[i]==')')&&(s[p]=='('))
{
w[p].a="";
w[p].flag=1;
w[i].a="()";
w[i].flag=1;
}
else if((s[i]==']')&&(s[p]=='['))
{
w[p].a="";
w[p].flag=1;
w[i].a="[]";
w[i].flag=1;
}
break;
}
}
}
}
for(int i=0;i<s.size();i++)
{
if((w[i].a==")"||w[i].a=="(")&&w[i].flag==0) w[i].a="()";
if((w[i].a=="["||w[i].a=="]")&&w[i].flag==0) w[i].a="[]";
cout<<w[i].a;
}
return 0;
}
by youngsmart @ 2024-10-22 21:49:10
这道题直接枚举左括号,看右括号是否匹配就可以了
#include<cstdio>
#include<cstring>
int q[101],top;
char c[101],b[101];
int main()
{
int i,l;
scanf("%s",c);
l=strlen(c);
for (i=0;i<l;i++)
{
if (c[i]=='(') {q[++top]=i; b[i]=')';}
if (c[i]=='[') {q[++top]=i; b[i]=']';}
if (c[i]==')'||c[i]==']')
if (!top||b[q[top]]!=c[i])
if (c[i]==')') b[i]='('; else b[i]='[';
else b[q[top--]]=' ';
}
for (i=0;i<l;i++)
{
if (b[i]=='('||b[i]=='[') printf("%c",b[i]);
printf("%c",c[i]);
if (b[i]==')'||b[i]==']') printf("%c",b[i]);
}
return 0;
}