本文主要是介绍CCF201509-3 模板生成系统 (100分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
试题编号: | 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;
}
这篇关于CCF201509-3 模板生成系统 (100分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!