Updating a Dictionary

来源:互联网 发布:淘宝优惠券群是真的吗 编辑:程序博客网 时间:2024/06/04 19:18

Updating a Dictionary
这道题目,真的很……我前前后后做了将近5个小时,我到现在也不知道,我的代码,哪里出了问题……
其实,就是简单的模拟,用结构体,数组,就可以做完的。
突然觉得自己很差,有的时候,脑袋转不过来,还要多多练习。

WA 的代码,如果哪位同学可以知道我是在哪里错了,望指点一二,谢谢~

AC :

#include <bits/stdc++.h>using namespace std;struct node{   char a[121], b[121];}t[121], t1[121];bool cmp(struct node d, struct node c){    return strcmp(d.a, c.a)<0;}int main(){    int T;    int aa[105];       int bb[105];       int cc[105];    cin>>T;    while(T--)    {       int i=0, j=0, top=0, top1 = 0;        char tt;        getchar();        scanf("%c",&tt);        while(tt!='}')            {                if(scanf("%[a-z]:%[0-9]",&t[top].a,&t[top].b))                {                  top++;                }                scanf("%c",&tt);                if(tt=='}')                    break;            }        getchar();        scanf("%c",&tt);        while(tt!='}')            {                if(scanf("%[a-z]:%[0-9]",t1[top1].a,t1[top1].b))                 {                  top1++;                }                scanf("%c",&tt);                if(tt=='}')                    break;            }       sort(t, t+top, cmp);       sort(t1, t1+top1, cmp);       i=0;       j=0;       int top2 = 0, top3 = 0, top4 = 0;       while(i<top&&j<top1)       {         if(strcmp(t[i].a, t1[j].a)==0)         {            if(strcmp(t[i].b, t1[j].b)!=0)            {               cc[top4++] = i;            }            i++;            j++;         }         else if(strcmp(t[i].a, t1[j].a)<0)         {           bb[top3++] = i;           i++;         }         else if(strcmp(t[i].a, t1[j].a)>0)         {            aa[top2++] = j;            j++;         }       }       while(i<top)       {          bb[top3++] = i;           i++;       }       while(j<top1)       {          aa[top2++] = j;            j++;       }        if(top2==0&&top3==0&&top4==0)       {          cout<<"No changes"<<endl;       }       if(top2)       {           printf("+");           for(i=0;i<top2-1;i++)           {              printf("%s,", t1[aa[i]].a);           }           printf("%s\n", t1[aa[i]].a);       }       if(top3)       {           printf("-");           for(i=0;i<top3-1;i++)           {              printf("%s,",t[bb[i]].a);           }           printf("%s\n", t[bb[i]].a);       }       if(top4)       {           printf("*");           for(i=0;i<top4-1;i++)           {              printf("%s,", t[cc[i]].a);           }           printf("%s\n",  t[cc[i]].a);       }       cout<<endl;    }    return 0;}

WA :

#include <bits/stdc++.h>using namespace std;struct node{   char a[121], b[121];}t[121], t1[121];bool cmp(struct node d, struct node c){    if(strcmp(d.a, c.a) < 0)        return true;    else        return false;}char r[121][121];char e[121][121];char w[121][121];int main(){    int T;    cin>>T;    while(T--)    {       for(int i=0;i<121;i++)       {         memset(t[i].a, '\0', sizeof(t[i].a));         memset(t[i].b, '\0', sizeof(t[i].b));       }       for(int i=0;i<121;i++)       {         memset(t1[i].a, '\0', sizeof(t1[i].a));         memset(t1[i].b, '\0', sizeof(t1[i].b));       }       memset(r, '\0', sizeof(r));       memset(e, '\0', sizeof(e));       memset(w, '\0', sizeof(w));       int i=0, j=0, top=0;       char n[121], m[121];       scanf("%s", n);       scanf("%s", m);       while(n[i]!='}')       {          if(n[i]=='{'||n[i]==',')          {                i++;               int op = 0;               while(n[i]!=':')               {                 t[top].a[op++] = n[i++];               }          }          if(n[i]==':')          {              i++;              int op = 0;               while(n[i]!=','&&n[i]!='}')               {                 t[top].b[op++] = n[i++];               }               top++;          }       }       int top1 =0;       i = 0;       while(m[i]!='}')       {          if(m[i]=='{'||m[i]==',')          {               i++;               int op = 0;               while(m[i]!=':')               {                 t1[top1].a[op++] = m[i++];               }          }          if(m[i]==':')          {              i++;              int op = 0;               while(m[i]!=','&&m[i]!='}')               {                 t1[top1].b[op++] = m[i++];               }               top1++;          }       }       sort(t, t+top, cmp);       sort(t1, t1+top1, cmp);       i=0;       j=0;       int top2 = 0, top3 = 0, top4 = 0;       while(i<top&&j<top1)       {         if(strcmp(t[i].a, t1[j].a)==0)         {            if(strcmp(t[i].b, t1[j].b)!=0)            {               strcpy(w[top4++], t[i].a);            }            i++;            j++;         }         else if(strcmp(t[i].a, t1[j].a)<0)         {           strcpy(e[top3++], t[i].a);           i++;         }         else if(strcmp(t[i].a, t1[j].a)>0)         {            strcpy(r[top2++], t1[j].a);            j++;         }       }       while(i<top)       {          strcpy(e[top3++], t[i].a);           i++;       }       while(j<top1)       {          strcpy(r[top2++], t1[j].a);            j++;       }       if(top2)       {           printf("+");           for(i=0;i<top2-1;i++)           {              printf("%s", r[i]);              printf(",");           }           printf("%s", r[i]);           cout<<endl;       }       if(top3)       {           printf("-");           for(i=0;i<top3-1;i++)           {              printf("%s", e[i]);              printf(",");           }           printf("%s", e[i]);           cout<<endl;       }       if(top4)       {           printf("*");           for(i=0;i<top4-1;i++)           {              printf("%s", w[i]);              printf(",");           }           printf("%s", w[i]);           cout<<endl;       }       if(top2==0&&top3==0&&top4==0)       {          cout<<"No changes"<<endl;       }       cout<<endl;    }    return 0;}

这是WA改完之后的代码:AC

#include <bits/stdc++.h>using namespace std;struct node{   char a[121], b[121];}t[121], t1[121];bool cmp(struct node d, struct node c){    if(strcmp(d.a, c.a) < 0)        return true;    else        return false;}char r[121][121];char e[121][121];char w[121][121];int main(){    int T;    cin>>T;    while(T--)    {       for(int i=0;i<121;i++)       {         memset(t[i].a, '\0', sizeof(t[i].a));         memset(t[i].b, '\0', sizeof(t[i].b));       }       for(int i=0;i<121;i++)       {         memset(t1[i].a, '\0', sizeof(t1[i].a));         memset(t1[i].b, '\0', sizeof(t1[i].b));       }       memset(r, '\0', sizeof(r));       memset(e, '\0', sizeof(e));       memset(w, '\0', sizeof(w));       int i=0, j=0, top=0;       char n[121], m[121];       scanf("%s", n);       scanf("%s", m);       while(n[i]!='}')       {          if(n[i]=='{'||n[i]==',')          {                i++;                 if(n[i]=='}')//添加                 break;//添加               int op = 0;               while(n[i]!=':')               {                 t[top].a[op++] = n[i++];               }          }          if(n[i]==':')          {              i++;              int op = 0;               while(n[i]!=','&&n[i]!='}')               {                 t[top].b[op++] = n[i++];               }               top++;          }       }       int top1 =0;       i = 0;       while(m[i]!='}')       {          if(m[i]=='{'||m[i]==',')          {               i++;               if(m[i]=='}')//添加                  break;//添加               int op = 0;               while(m[i]!=':')               {                 t1[top1].a[op++] = m[i++];               }          }          if(m[i]==':')          {              i++;              int op = 0;               while(m[i]!=','&&m[i]!='}')               {                 t1[top1].b[op++] = m[i++];               }               top1++;          }          }       sort(t, t+top, cmp);       sort(t1, t1+top1, cmp);       i=0;       j=0;       int top2 = 0, top3 = 0, top4 = 0;       while(i<top&&j<top1)       {         if(strcmp(t[i].a, t1[j].a)==0)         {            if(strcmp(t[i].b, t1[j].b)!=0)            {               strcpy(w[top4++], t[i].a);            }            i++;            j++;         }         else if(strcmp(t[i].a, t1[j].a)<0)         {           strcpy(e[top3++], t[i].a);           i++;         }         else if(strcmp(t[i].a, t1[j].a)>0)         {            strcpy(r[top2++], t1[j].a);            j++;         }       }       while(i<top)       {          strcpy(e[top3++], t[i].a);           i++;       }       while(j<top1)       {          strcpy(r[top2++], t1[j].a);            j++;       }       if(top2)       {           printf("+");           for(i=0;i<top2-1;i++)           {              printf("%s", r[i]);              printf(",");           }           printf("%s", r[i]);           cout<<endl;       }       if(top3)       {           printf("-");           for(i=0;i<top3-1;i++)           {              printf("%s", e[i]);              printf(",");           }           printf("%s", e[i]);           cout<<endl;       }       if(top4)       {           printf("*");           for(i=0;i<top4-1;i++)           {              printf("%s", w[i]);              printf(",");           }           printf("%s", w[i]);           cout<<endl;       }       if(top2==0&&top3==0&&top4==0)       {          cout<<"No changes"<<endl;       }       cout<<endl;    }    return 0;}

 就只是在原来的基础上加了几行……
 比如说{}就跳不出来,自己没想到的输入,感觉真的很……
另外,特别感谢CXS同学的指点,大神,余生多多指教……

原创粉丝点击