解题代码:(还有点小错误,暂时没有找到。。。)
#include<bits/stdc++.h>
using namespace std;
struct List
{
int m,k;
string s;
int a[103];
}l[103];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,i,j,m=0,k,num;
char s[103];
string name;
//memset(l,0,sizeof(l));
for(i=0;i<103;++i)
{
l[i].m=0;
l[i].k=0;
l[i].s="";
}
scanf("%d",&n);
for(j=0;j<n;++j)
{
scanf("%s",s);
string ss=s;
//cout<<ss<<endl;
int k1=ss.find("=");
int k2=ss.find(".ap");
int k3=ss.find(".sort");
int k4=ss.find("[");
if(k1!=-1)
{
name="";
for(i=0;i<strlen(s);++i)
{
if(s[i]=='=')break;
else name[i]=s[i];
}
k=0;
for(i=0;i<m;++i)
{
//string nam=l[i].s;
if(name==l[i].s&&l[i].k)
{
k=1;
l[i].k=0;
l[i].m=0;
l[i].s="";
break;
}
}
if(k==0)
{
l[m].k=1;
l[m].s=name;
//strcpy(l[m].s,name);
m++;
}
continue;
}
if(k2!=-1)
{
name="";
for(i=0;i<strlen(s);++i)
{
if(s[i]=='.')break;
else name[i]=s[i];
}
int x=0;
num=0;
for(i+=8;i<strlen(s)-1;++i)
{
num=num*10+s[i]-'0';
}
for(i=0;i<m;++i)
{
//string nam=l[i].s;
if(name==l[i].s&&l[i].k)
{
l[i].a[(l[i].m)++]=num;
//l[i].a[(l[i].m)++]=num;
break;
}
}
continue;
}
if(k3!=-1)
{
name="";
for(i=0;i<strlen(s);++i)
{
if(s[i]=='.')break;
else name[i]=s[i];
}
for(i=0;i<m;++i)
{
if(name==l[i].s&&l[i].k)
{
sort(l[i].a,l[i].a+l[i].m);
break;
}
}
continue;
}
if(k4!=-1)
{
name="";
for(i=0;i<strlen(s);++i)
{
if(s[i]=='[')break;
else name[i]=s[i];
}
num=0;
for(i+=1;i<strlen(s)-1;++i)
{
num=num*10+s[i]-'0';
}
int k=1;
for(i=0;i<m;++i)
{
//string nam=l[i].s;
if(name==l[i].s&&l[i].k)
{
//sort(l[i].a,l[i].a+l[i].m);
if(l[i].m>num)
{
printf("%d\n",l[i].a[num]);
k=0;
}
break;
}
}
if(k)printf("ERROR\n");
continue;
}
}
}
}
错误思路代码:
由于此题输入存在“[]”,所以要用%[^ ]进行scanf与sscanf输入格式控制,会受到“[]”的干扰,故此题不应采用%[^ ]进行输入格式赋值。
#include<bits/stdc++.h>
using namespace std;
struct List
{
char s[13];
int a[103],m,k;
};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,i,j,m=0,k;
char s[103],name[103],number,id;
List l[103];
scanf("%d",&n);
memset(l,0,sizeof(l));
for(j=0;j<n;++j)
{
scanf("%s",s);
string ss=s;
int k1=ss.find("=");
int k2=ss.find(".ap");
int k3=ss.find(".sort");
int k4=ss.find("[");
//cout<<k1<<" "<<k2<<" "<<k3<<" "<<k4<<endl;
//cout<<j<<endl;
//getchar();
if(k1!=-1)
{
sscanf(s,"%[^=]=[]",name);
//cout<<name<<endl;
k=0;
string na=name;
for(i=0;i<m;++i)
{
if(l[i].s==na)
{
k=1;
memset(&l[i],0,sizeof(l[i]));
break;
}
}
if(k==0)
{
l[m].k=1;
//l[m].s=name;
strcpy(l[m].s,name);
m++;
}
//printf("%d\n",k1);
//printf("%s\n",name);
continue;
}
if(k2!=-1)
{
sscanf(s,"%[^.].append(%d)",name,&number);
string na=name;
//printf("%s %d\n",name,number);
//cout<<name<<" "<<number<<endl;
for(i=0;i<m;++i)
{
if(l[i].s==na)
{
l[i].a[(l[i].m)++]=number;
break;
}
}
continue;
}
if(k3!=-1)
{
sscanf(s,"%[^.].sort()",name);
string na=name;
for(i=0;i<m;++i)
{
if(l[i].s==na)
{
sort(l[i].a,l[i].a+l[i].m);
break;
}
}
continue;
}
//int k3=sscanf(s,"%[^.].sort()",name);
if(k4!=-1)
{
sscanf(s,"%[^[][%d]",name,&id);
string na=name;
//cout<<name<<endl;
//printf("%d\n",id);
int k=1;
for(i=0;i<m;++i)
{
if(l[i].s==na)
{
//sort(l[i].a,l[i].a+l[i].m);
if(l[i].m>=id)
{
printf("%d\n",l[i].a[id]);
k=0;
}
break;
}
}
if(k)printf("ERROR\n");
continue;
}
}
}
}