[csp-201403-3]命令行选项
1 #include<bits/stdc++.h> 2 //#include <sstream> // if want to use stringstream 3 using namespace std; 4 5 const int N=310; 6 7 struct node{ 8 string c; 9 bool has_c,can_has_c,bk,vis; 10 }a[N]; 11 string s,c; 12 int sl; 13 14 void init() 15 { 16 getline(cin,s); 17 sl=s.size(); 18 for(int i=1;i<=26;i++) a[i].bk=0,a[i].vis=0,a[i].can_has_c=0,a[i].has_c=0; 19 for(int i=0;i<sl;i++) 20 { 21 int now=s[i]-'a'+1; 22 a[now].bk=1; 23 a[now].can_has_c=0; 24 if(i+1<sl && s[i+1]==':') 25 { 26 i++; 27 a[now].can_has_c=1; 28 } 29 } 30 } 31 32 void getnext() 33 { 34 c=""; 35 while(sl<s.size()) 36 { 37 if(s[sl]==' ' || s[sl]=='\n') {sl++;break;} 38 c+=s[sl];sl++; 39 //if(!((s[sl]>='a' && s[sl]<='z') || (s[sl]>='0' && s[sl]<='9') || s[sl]=='-')) {sl++;break;} 40 } 41 } 42 43 void solve() 44 { 45 for(int i=1;i<=26;i++) a[i].has_c=0,a[i].vis=0; 46 sl=0; 47 getline(cin,s); 48 getnext(); 49 while(1) 50 { 51 getnext(); 52 if(c.size()==0) return; 53 if(c[0]=='-') 54 { 55 int now=c[1]-'a'+1; 56 if(!a[now].bk) return; 57 a[now].vis=1; 58 if(a[now].can_has_c) 59 { 60 getnext(); 61 if(c.size()==0) 62 { 63 if(!a[now].has_c) a[now].vis=0; 64 return ; 65 } 66 a[now].has_c=1; 67 a[now].c=c; 68 } 69 } 70 else return ; 71 } 72 } 73 74 void output() 75 { 76 for(int i=1;i<=26;i++) 77 { 78 if(a[i].vis) printf(" -%c",i-1+'a'); 79 if(a[i].has_c) cout << ' ' << a[i].c; 80 } 81 cout << endl; 82 } 83 84 int main() 85 { 86 //freopen("a.in","r",stdin); 87 init(); 88 int T; 89 scanf("%d",&T);getline(cin,s); 90 for(int TT=1;TT<=T;TT++) 91 { 92 printf("Case %d:",TT); 93 solve(); 94 output(); 95 } 96 return 0; 97 }