#include <iostream> #include <string> //正确 100 //1 1 //{{ }} //name "1" //{{ }} using namespace std; int main() { int NUM1; int NUM2; cin>>NUM1;//文章的行数 cin>>NUM2;//变量的行数 string temp; getline(cin,temp,'\n'); string a[NUM1]; string b[NUM2]; string c[NUM2]; int i; for(i=0;i<NUM1;i++)//读取文章中的每行 { getline(cin,a[i],'\n'); } for(i=0;i<NUM2;i++)//得修改 { cin>>b[i];//读取变量名 getline(cin,c[i],'\n');//读取变量值 } for(i=0;i<NUM2;i++)//去掉变量值的引号 { c[i]=c[i].substr(2,c[i].size()-3); } int j; for(i=0;i<NUM1;i++)//遍历文章 { //先find()再replace() //while(1) int pos; for(pos=0;pos<a[i].size();pos++) { int pos1=a[i].find("{{ ",pos); if(pos1==string::npos) { break; } int pos2=a[i].find(" }}",pos1+3);//加个break也没加分 //+3 if(pos2==string::npos) { break; } //cout<<pos2<<endl; string ti=a[i].substr(pos1+3,pos2-pos1-3); //cout<<ti<<endl; int flag=0; for(j=0;j<NUM2;j++) { if(ti==b[j]) { flag=1; a[i].replace(pos1,pos2-pos1+3,c[j]); pos=pos1+c[j].size()-1; break; } } if(flag==0) { a[i].replace(pos1,pos2-pos1+3,""); pos=pos1-1; } } } for(i=0;i<NUM1;i++) { cout<<a[i]<<endl; } return 0; }