求助:在不改变思路的情况下,简化这段代码
查看原帖
求助:在不改变思路的情况下,简化这段代码
128653
liujunye_tom楼主2020/8/4 17:31
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
const int maxn=114154;
int next1[maxn],cur=0;
int k[maxn];
int main(){
	string n;
	while(cin>>n){
	int cnt=0;
	memset(k,0,sizeof(k));
	int Fir=0,len=n.length(),lst=maxn,cur,TeMP=1;
	for(int i=0;i<n.length();i++){
		if(n[i]=='['||n[i]==']'){
		    len--;continue;
		}
		if(n[i-1]=='['){
			TeMP=1;
			Fir=i;
			cnt++;
			k[cnt]=i;
		}
		if(n[i-1]==']'){
			TeMP=2;
			next1[lst]=i;
		}
		if(n[i+1]=='['||n[i+1]==']'){
			if(lst==maxn)
				lst=i;
			if(TeMP==2)
				lst=i;
			if(cnt-1>=0){
				next1[i]=k[cnt-1];
				continue;}
		}
		next1[i]=i+1;
	}
	if(n[n.length()-1]!='['||n[n.length()-1]!=']'){
		next1[n.length()-1]=k[cnt-1];
	}
	while(n[Fir]=='['||n[Fir]==']'){
		Fir++;
	}
	cur=Fir;
	while(len--){
		if(n[cur]==' ')
			continue;
		cout<<n[cur];cur=next1[cur];
	}
    cout<<endl;
    }
	return 0;
}
2020/8/4 17:31
加载中...