273. Python List-计算机一2014 //字符串格式控制

解题代码:(还有点小错误,暂时没有找到。。。)

#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;
            }
            
        }
     }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值