代码如下:
#include<bits/stdc++.h>
using namespace std;
string x,ans;
int l[10001],ln;
signed main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>x;
for(int i=0;i<x.length();i++)
{
if(x[i]=='[')
{
ln++;//等待匹配的左括号数量增加
l[ln]=i;//记录前面出现过的左括号的位置
cout<<"test 1: ln="<<ln<<" l[ln]="<<l[ln]<<endl;
}
else if(x[i]==']')//只要遇到右括号,就立即展开与其匹配的左括号(即最后记录的左括号)
{
int n=x[l[ln]+1]-'0';string a;
if(isdigit(x[l[ln]+2]))n=n*10+(int)(x[l[ln]+2]-'0');//如果n是两位数则记录
cout<<"test 2.1: i="<<i<<" n="<<n<<endl;
if(n>9)a=x.substr(l[ln]+3,i-l[ln]-3+1);//截取被展开的内容
else a=x.substr(l[ln]+2,i-l[ln]-3+1);
cout<<"test 2.2: a="<<a<<endl;
x.erase(l[ln],i-l[ln]+1);//删除原数组中被压缩的部分
for(int j=1;j<=n;j++)x.insert(l[ln],a);//将展开的内容直接插入原字符串
cout<<"test 2.3: x="<<x<<endl;
ln--;//退回上一个左括号
cout<<"test 2.4: ln="<<ln<<endl;
}
}
cout<<x;
//fclose(stdin);
//fclose(stdout);
return 0;
}
//stdin 1:HJHis[11H[4o]m[5o]]
//stdin 2:[3k]sco3[8AK[10IOI]]
错误情况1:
不能过样例,每个fun输出时都少一个n,但用测试数据时程序返回值是0


如果将错误情况1的截取范围+1,能过样例,但成了错误情况2:
样例没问题,但是用测试数据时程序貌似会RE(返回值不是0)
