【ZOJ 3480】Duck Typing

题意

1.有t组数据,输入时每组数据之间空格隔开,输出时也要求空格隔开。

2.每组都是一行begin开始,一行end结束。

3.class ClassName[:Super] 表示声明一个类型,Super值存在时,说明它继承Super类型。

4.def ClassName.Method 表示声明ClassName类型的一个方法。

5.undef ClassName.Method 表示删除该类型下该方法。

6.call ClassName.Method 表示调用该方法,如果该类型本身没有该方法,就去看它祖先是否有。

分析

可以用字符串string的函数处理,也可以用char处理(我写的姿势不是很好看,手动捂脸)。

说几个容易错的地方:。。其实姿势不同,会错的地方也不同。最口怕的是我WA在了把“oops"拼写成"opps"了QAQ。还有比如”.“不要写成”:“了!

代码

char处理

  1 #include<cstdio>
  2 #include<cstring>
  3 
  4 struct cla
  5 {
  6     char name[50];
  7     int mnum;//num of method
  8     char md[50][50];//method
  9     int super;
 10 } a[10050];
 11 void read(char c,int &flag,char name[][50])
 12 {
 13     int k=0;
 14     int len=0;
 15     int cnt=0;
 16     flag=1;
 17     if (c=='b' ||c=='e') flag=0;//begin/end
 18     while((c=getchar())&&c!='
')
 19     {
 20         cnt++;
 21         if (cnt==1 && flag)
 22         {
 23             if (c=='e') flag=2;
 24             else if (c=='a') flag=3;
 25             else if (c=='n') flag=4;
 26         }
 27         if (flag==1 && cnt>5 ||//class ClassName
 28                 flag==2 && cnt>3 ||//def ClassName.Method
 29                 flag==3 && cnt>4 ||//undef ClassName.Method
 30                 flag==4 && cnt>5 ||//call ClassName.Method
 31                 flag==5 )//class Sub:Super
 32         {
 33             name[k][len]=c;
 34             if (c==':')
 35             {
 36                 name[k][len]='