试题编号: | 201509-3 |
试题名称: | 模板生成系统 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 输入格式 输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。 输出格式 输出包含若干行,表示模板生成的结果。 样例输入 11 2 样例输出 <!DOCTYPE html> 评测用例规模与约定 0 ≤ m ≤ 100 |
思路:STL的find(),replace()用法
用法参考:
string类中关于字串替换的实现(find后再replace的方法)
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int dir[4][2]= {1,0,0,1,-1,0,0,-1};
const double eps = 1e-6;
const int INF=0x3f3f3f3f;
const int MOD=1e9+7;
const int N = 1e3+5;
vector<string>text;
string key,val;
map<string,string>dict;
int main() {
int n,m;
string str;
cin>>n>>m;
cin.get();///吃掉换行符
for(int i=0; i<n; i++) {
getline(cin,str);
text.push_back(str);
}
for(int i=0; i<m; i++) {
cin>>key;
getline(cin,val);
dict[key]=val.substr(2,val.size()-3);
}
///替换字符串并输出
for(int i=0; i<n; i++) {
int pre=0,next;
while(1) {
///string的find(s,pre)表示从下标为pre的位置查找字符串s,若未找到返回-1
if((pre=text[i].find("{{ ",pre))==-1) break;
if((next=text[i].find(" }}",pre))==-1) break;///若找到一个pre,从pre后查找"}}"
key=text[i].substr(pre+3,next-pre-3);///将{{ }}里的字符串key提出
text[i].replace(pre,next-pre+3,dict.count(key)?dict[key]:"");///替换
pre+=dict.count(key)?dict[key].size():0;///避免重复替换
}
cout<<text[i]<<endl;
}
return 0;
}
STL标准库简化代码!!!