要注意问题中的不能模板递归生成,还有测试中有“ }}”出现在“{{ ”的情况(我之前就是没有考虑到这个得了90)
源代码
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<stdio.h>
using namespace std;
int m,n;
vector<string> ss;
map<string,string> mm;
int main()
{
void k(string &ss,int p);
cin>>m>>n;
getchar();
for(int i=0;i<m;i++)
{
string s;
getline(cin,s);
ss.push_back(s);
}
for(int i=0;i<n;i++)
{
string a,b;
cin>>a;
getchar();
getline(cin,b);
b.erase(0,1);
b.erase(b.size()-1,1);
mm[a]=b;
}
for(int i=0;i<m;i++)
{
k(ss[i],ss[i].size());
cout<<ss[i]<<endl;
}
return 0;
}
void k(string &ss,int p)
{
int pos=ss.rfind("{{ ",p);
int end=ss.rfind(" }}",p);
if(pos==string::npos||end==string::npos||end<pos)return;
string s=ss.substr(pos+3,end-pos-3);
map<string,string>::iterator it;
it=mm.find(s);
if(it==mm.end())
{
ss.replace(pos,end-pos+3,"");
}
else
{
ss.replace(pos,6+s.size(),mm[s]);
}
k(ss,pos);
}