求能卡住我代码的样例
查看原帖
求能卡住我代码的样例
226167
呆呆的她啊楼主2023/10/29 18:05
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int flag=0;int g;int g1;
int ww=0;
int len;int num=0;int u,v;
bool vis[200]={0};
vector<int>vec;
string s;
queue<char>q,q1,q3;
	//[2[2nonoonon]]
void check(string s,int num){
		for(int i=0;i<s.size();i++)
	{	if(s[i]=='[')
		{u=i;
     	}//cout<<"u等于"<<u<<" ";
	}
		//[2[2]]
	for(int i=s.size()-1;i>u;i--)
	{	if(s[i]==']')
	{v=i;//cout<<"v等于"<<v;
	}
	}
	//cout<<endl;
//	cout<<"ss";
	if(s[u+1]-'0'!=1)
	{ if(s[u+2]>'0'&&s[u+2]<='9')
		{
			g1=(s[u+1]-'0')*10+s[u+2]-'0';
	//	cout<<g1;
		ww=1;
		//怕》10 ww拿来卡着
			
		}
		else g1=s[u+1]-'0';		
	}
	else if(s[u+1]-'0'==1&&s[u+2]>'0'&&s[u+2]<='9')
	{
		
		g1=(s[u+1]-'0')*10+s[u+2]-'0';	ww=1;
	}
	else g1=1;	
	//如果g1两位数 下面也要改
  if(flag==0)//cout<<g;//【的旁边数字 等会数字到】都要删除了
{	
	  if(ww==1)
	  {
		  for(int i=1;i<=g1;i++)
		  {
			  for(int j=u+3;j<v;j++)q.push(s[j]);	
		  }
		  flag=1;
		  
	  }
	else if(ww==0)
	{
		for(int i=1;i<=g1;i++)
		{
			for(int j=u+2;j<v;j++)q.push(s[j]);	
		}
		flag=1;
		// cout<<"qqqqq0";
		
	}
	
}
	else if(flag)
	{
		q1=q;
		q3=q;	
		for(int i=1;i<=g1;i++)
		{
		  while(!q1.empty())
		  {
			  char r=q1.front();
			  //cout<<"sdsds";
			  q.push(r);
			  q1.pop();			  
		  }		
		}q1=q3;
	}
//	while(!q.empty())
//	{
//		char c=q.front();
//		cout<<c;
//		q.pop();
//		
//	}
//读入 然后还要删除了
	s.erase(s.begin()+u,s.begin()+v);
	num=num-1;
	//[2[2nonoonon]]
	if(num==0)return;
     else  check(s,num);

}
int main()
{
	string d;int tt;
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>s;	d=s;len=s.size();
//cout<<len;//cout<<num;
	for(int i=0;i<len;i++)
	{ // cout<<num;
		if(s[i]=='['&&!vis[i])
		{ 
			for(int j=len-1;j>i;j--)
			{
				//cout<<num;
				if(s[j]==']'&&vis[j]!=1)
				{
					num++;	
				//	cout<<num;
					vis[j]=1;
					vis[i]=1;
					vec.push_back(j);
					
				//	cout<<i<<" "<<j;
				}
			}
		}		
	}//统计到底有多少个相对于的左右括号
//	cout<<num;
	check(s,num);
	int g=0;
//cout<<"Sds";

  while(d[g]!='[')
  {	 // cout<<"sd";
	  cout<<d[g];
	  g++;
  }
while(!q.empty())
{
	char c=q.front();
	//cout<<"Sdsdsddewsda";
	cout<<c;
	q.pop();	
} int l=len-1;
	int ll=vec.front();
for(int i=ll+1;i<len;i++)
{
	
	
	cout<<d[i];
}
	
	return 0;
}
//	
//	
//	if(s[i]=='['&&s[i-1]>'0'&&s[i-1]<=9)
//	{
//		for(int j=i;i<len;j++)if(s[j]==']')c=1;
//		
//	}
//	
2023/10/29 18:05
加载中...