求助,字符串截取压缩的部分有问题改不来了
查看原帖
求助,字符串截取压缩的部分有问题改不来了
119643
潜水的蒟蒻楼主2022/5/2 11:32

代码如下:

#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)

2022/5/2 11:32
加载中...