(http://115.28.138.223/view.page?gpid=T30)
#include<iostream>
using namespace std;
#include<string.h>
#define maxn 0x7fffffff
#include<map>
#include<stdio.h>
int m,n;
int main()
{
int i,j;
string s[105];
string s1,s2,s3,s4;
cin>>n>>m;
getchar();
for(i=0;i<n;i++)
getline(cin,s[i]);
map<string,string>v;
for(j=0;j<m;j++)
{
int k,k1=0;
cin>>s1;
getchar();
getline(cin,s2);
s1.insert(0,"{{ ");
s1=s1+" }}";
s2.erase(0,1);
s2.erase(s2.end()-1,s2.end());
v[s1]=s2;
}
int j1[20],j2[20],k,k1;
for(i=0;i<n;i++)
{
k1=0;
memset(j1,-1,sizeof(j1));
memset(j2,-1,sizeof(j2));
for(j=0;s[i][j]!=0;j++)
{
if(s[i][j]=='{'&&s[i][j+1]=='{')
j1[k1]=j;
if(s[i][j]=='}'&&s[i][j+1]=='}')
j2[k1]=j+1;
if(j1[k1]!=-1&&j2[k1]!=-1)
k1++;
}
int t=0;
for(j=0;j<k1;j++)
{
s3="";
for(k=j1[j]+t;k<=j2[j]+t;k++)
s3.insert(s3.end(),s[i][k]);
if(v.count(s3))
{
s[i].replace(s[i].begin()+j1[j]+t,s[i].begin()+j2[j]+1+t,v[s3]);
t=t+v[s3].size()-s3.size();//注意替代后字符串的长度发生改变,t为变化的长度。
}
else
{
s[i].replace(s[i].begin()+j1[j]+t,s[i].begin()+j2[j]+1+t,"");
t=t-s3.size();
}
}
cout<<s[i]<<endl;
}
return 0;
}