| 试题编号: | 201509-3 |
| 试题名称: | 模板生成系统 |
| 时间限制: | 1.0s |
| 内存限制: | 256.0MB |
| 问题描述: | 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 输入格式 输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。 输出格式 输出包含若干行,表示模板生成的结果。 样例输入 11 2 样例输出 <!DOCTYPE html> 评测用例规模与约定 0 ≤ m ≤ 100 |
问题链接:CCF201509-3 模板生成系统
问题分析:模拟,注意find(),replace()和substr()函数的学习,掌握了这3个函数,解决这道题就比较容易了。
程序说明:C++程序使用getchar()函数要包括cstdio或者stdio.h头文件;回车符对getline()函数会造成影响,因此要考虑吸收多余的回车符,具体看程序。
提交后得100分的C++程序:
#include<iostream>
#include<string>
#include<cstdio>//使用消除空白符的函数getchar()
#include<vector>
#include<map>
using namespace std;
vector<string>res;
map<string,string>d;
void init()
{
res.clear();
d.clear();
string s1,s2;
int n,m;
//读入数据
cin>>m>>n;
getchar();//吸收空白符
while(m--){
getline(cin,s1);
res.push_back(s1);
}
while(n--){
cin>>s1;
getchar();//吸收空白符
getline(cin,s2);
s2.erase(s2.begin()); //去掉前引号
s2.erase(s2.end()-1); //去掉后引号
s1="{{ "+s1+" }}";
d[s1]=s2;
}
}
int main()
{
init();
for(int i=0;i<res.size();i++){//遍历每一行
for(int j=0;j<res[i].size();j++){
int pos1=res[i].find("{{ ",j);//从位置j开始查找 "{{ "
int pos2=res[i].find(" }}",j+3);//从位置j+3开始查找 " }}"
if(pos1==string::npos||pos2==string::npos)
break;
if(pos2>pos1){//如果查找到了
string s=res[i].substr(pos1,pos2+3-pos1);//此为查找到的子串
//字符串res[i]从pos1开始s.length()长的子串替换成d[s]或""
res[i].replace(pos1,s.length(),d.count(s)?d[s]:"");
}
}
}
for(int i=0;i<res.size();i++)
cout<<res[i]<<endl;
return 0;
}
本文介绍了一个模板生成系统的实现原理及示例程序。该系统能够通过替换预设模板中的变量来生成特定的网页内容,适用于网站动态页面的快速构建。文章详细讲解了变量匹配规则、模板替换流程,并提供了一段C++代码作为实现示例。


&spm=1001.2101.3001.5002&articleId=81232487&d=1&t=3&u=af95464fee4b43aca055404ebc57ac91)
7万+

被折叠的 条评论
为什么被折叠?



