问题描述
成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是
而当用户为 Jerry 时,网页的源代码是
这样的例子在包含动态内容的网站中还有很多。为了简化生成网页的工作,成成觉得他需要引入一套模板生成系统。
模板是包含特殊标记的文本。成成用到的模板只包含一种特殊标记,格式为 ,其中 VAR 是一个变量。该标记在模板生成时会被变量 VAR 的值所替代。例如,如果变量 name = “Tom”,则 会生成 Tom。具体的规则如下:
变量名由大小写字母、数字和下划线 (_) 构成,且第一个字符不是数字,长度不超过 16 个字符。
变量名是大小写敏感的,Name 和 name 是两个不同的变量。
变量的值是字符串。
如果标记中的变量没有定义,则生成空串,相当于把标记从模板中删除。
模板不递归生成。也就是说,如果变量的值中包含形如 的内容,不再做进一步的替换。
1 | 输入格式 |
1 | 评测用例规模与约定 |
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<string,string> mapp;
int n,m;
cin>>n>>m;
string res=””;
string line;
//getchar();
cin.ignore();
for(int i=0;i<n;i++){
getline(cin,line);
res+=line;
if(i!=n-1)res+=”\n”;
}
string key,value;
string line2;
for(int j=0;j<m;j++){
cin>>key;
getline(cin,line2) ;
mapp[key] = line2.substr(2, line2.length()-3);
}
int pos1,pos2;
int pos=0;
while((pos1=res.find(“,pos))!=-1&&((pos2=res.find(“,pos))!=-1)){
string s=res.substr(pos1+3,pos2-pos1-3);
res.erase(pos1,pos2+3-pos1);
if(mapp.count(s)) {
res.insert(pos1,mapp[s]);
//已经erase了 字符串位置变化了 pos=pos2+1是错误的
pos=pos1+mapp[s].length();
}
}
cout<<res<<endl;
}`