[csp-201509-3]模板生成系统

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N=110;
 5 string a[N],b[N],c[N];
 6 
 7 int main()
 8 {
 9     //freopen("a.in","r",stdin);
10     int n,m;
11     scanf("%d%d",&n,&m);getline(cin,a[0]);
12     for(int i=1;i<=n;i++) getline(cin,a[i]);
13     string s;
14     for(int i=1;i<=m;i++)
15     {
16         getline(cin,s);
17         int j=0;
18         b[i]="{{ ";
19         for(j=0;j<s.size();j++) 
20         {
21             if(s[j]==' ') {j+=2;break;}
22             b[i]+=s[j];
23         }
24         b[i]+=" }}";
25         c[i]="";
26         for(;j<s.size()-1;j++) c[i]+=s[j];
27     }
28     // for(int i=1;i<=n;i++)
29         // cout << b[i] << ' ' << c[i] << endl;
30     for(int i=1;i<=n;i++)
31     {
32         string token="";
33         for(int j=0;j<a[i].size();j++)
34         {
35             bool ok=0;
36             if(j+1<a[i].size() && a[i][j]=='{' && a[i][j+1]=='{')
37             {
38                 for(int k=1;k<=m;k++)
39                 {
40                     if(a[i].compare(j,b[k].size(),b[k])==0) 
41                     {
42                         ok=1;
43                         j+=b[k].size()-1;
44                         token+=c[k];
45                         break;
46                     }
47                 }
48                 if(!ok)
49                 {
50                     for(int k=j+3;k<a[i].size();k++) 
51                         if(a[i][k]=='}' && a[i][k-1]=='}' && a[i][k-2]==' ') {j=k;ok=1;break;}
52                 }
53             }
54             if(!ok) token+=a[i][j];
55         }
56         cout << token << endl;
57     }
58     return 0;
59 }

 

posted @ 2018-12-13 00:06  拦路雨偏似雪花  阅读(239)  评论(0编辑  收藏  举报