题意
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]='