ccf模板生成系统java_CCF真题之模板生成系统

成成正在构建一个网站,他需要一个模板生成系统来简化动态内容页面的创建。这个系统使用{{ VAR }}标记来替换变量,根据输入的变量值生成最终的网页源代码。给定模板和变量值,系统能够正确地替换模板中的变量并生成相应的HTML页面。例如,给定模板和用户信息,系统可以生成展示用户信息的静态网页。
摘要由CSDN通过智能技术生成

问题描述

成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是

ZmlkPU1iZzNlTmFx.jpg

而当用户为 Jerry 时,网页的源代码是

ZmlkPTY5bWJCNlRB.jpg

这样的例子在包含动态内容的网站中还有很多。为了简化生成网页的工作,成成觉得他需要引入一套模板生成系统。

模板是包含特殊标记的文本。成成用到的模板只包含一种特殊标记,格式为 {{ VAR }},其中 VAR 是一个变量。该标记在模板生成时会被变量 VAR 的值所替代。例如,如果变量 name = "Tom",则 {{ name }} 会生成 Tom。具体的规则如下:

·变量名由大小写字母、数字和下划线 (_) 构成,且第一个字符不是数字,长度不超过 16 个字符。

·变量名是大小写敏感的,Name 和 name 是两个不同的变量。

·变量的值是字符串。

·如果标记中的变量没有定义,则生成空串,相当于把标记从模板中删除。

·模板不递归生成。也就是说,如果变量的值中包含形如 {{ VAR }} 的内容,不再做进一步的替换。

输入格式

输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。

接下来 m 行,每行是一个字符串,表示模板。

接下来 n 行,每行表示一个变量和它的值,中间用一个空格分隔。值是字符串,用双引号 (") 括起来,内容可包含除双引号以外的任意可打印 ASCII 字符(ASCII 码范围 32, 33, 35-126)。

输出格式

输出包含若干行,表示模板生成的结果。

样例输入

11 2

< !DOCTYPE html>

< html>

< head>

< title>User {{ name }}

< /head>

< body>

< h1>{{ name }}

< p>Email: {{ email }}

< p>Address: {{ address }}

< /body>

< /html>

name "David Beckham"

email "david@beckham.com"

样例输出

< html>

< head>

< title>User David Beckham

< /head>

< body>

< h1>David Beckham

< p>Email: david@beckham.com

< p>Address:

< /body>

< /html>

评测用例规模与约定

0 ≤ m ≤ 100   0 ≤ n ≤ 100

输入的模板每行长度不超过 80 个字符(不包含换行符)。

输入保证模板中所有以 {{ 开始的子串都是合法的标记,开始是两个左大括号和一个空格,然后是变量名,结尾是一个空格和两个右大括号。

输入中所有变量的值字符串长度不超过 100 个字符(不包括双引号)。

保证输入的所有变量的名字各不相同。

源代码如下:

#include

#include

#include

using namespace std;

int main()

{

int n,m,i,j,start,end,flag;

string inStr[102],outStr[102],varStr[102][2],tempVar;

cin>>n>>m;

getchar();//当输入输出有问题时,尝试加入getchar处理换行符

for(i=0;i

getline(cin,inStr[i]);

for(i=0;i

{

cin>>varStr[i][0];

getline(cin,varStr[i][1]);

start=varStr[i][1].find("\"");

end=varStr[i][1].rfind("\"");

varStr[i][1]=varStr[i][1].substr(start+1,end-start-1);

}

for(i=0;i

{

//flag=0; //一开始flag初始化在这里,找了好久的bug才找到是这里出错了

while(1)

{

flag=0;//flag应定义在循环内,因为一个语句中会包含多个变量,需要用flag来标记该变量是否被定义

start=inStr[i].find("{{ ");

end=inStr[i].find(" }}");

if(start<0||end<0) break; //若未找到"{{ "或者" }}",则退出循环

tempVar=inStr[i].substr(start+3,end-start-3);//取出变量的值如name

for(j=0;j

{

if(tempVar==varStr[j][0])

{

flag=1;

tempVar=varStr[j][1];

break;

}

}

if(flag==0) tempVar="";

outStr[i]=outStr[i]+inStr[i].substr(0,start)+tempVar;

inStr[i]=inStr[i].substr(end+3,inStr[i].length()-end-3);

}

outStr[i]=outStr[i]+inStr[i];//不要忘了加上最后剩下的一截输入

cout<

}

return 0;

}

CCF真题之门禁系统

201412-1 问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入 ...

CCF CSP 201509-3 模板生成系统

CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-3 模板生成系统 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据 ...

CCF系列之模板生成系统&lpar; 201509-3 &rpar;

试题名称: 模板生成系统 试题编号: 201509-3 时间限制: 1.0s 内存限制: 256.0MB 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的 ...

CCF 201509-3&Tab;模板生成系统 &lpar;STL&plus;模拟&rpar;

问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的.例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 而当用户为 Jerr ...

CCF真题之最优灌溉

201412-4 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利 ...

CCF真题之窗口

201403-2 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示 ...

CCF真题Z型输出

#include #include #include #include ...

CCF&lowbar; 201509-3&lowbar;模板生成系统

又是一道考验细心和耐心的题,不知道哪里出问题了,一直只有90分 = =! #include #include #include

CCF真题之命令行选项

201403-3 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项.每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔.这些字符串中的第一个为该命令行工具的名字,由小写字母 ...

随机推荐

java&amp&semi;testng中Assert

用testng中的assert做断言时,如果断言失败,则在当前方法中失败的语句后的语句将不会再执行: 如图: 看控制台输出语句:

CentOS下源码安装mplayer播放器

http://www.mplayerhq.hu/MPlayer/releases/ [root@ok MPlayer-1.2.1]# pwd /root/MPlayer-1.2.1 http://ww ...

一个很不错的bash脚本编写教程

转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...

P1119&colon; &lbrack;POI2009&rsqb;SLO

这题预处理稍微动动脑,其实还是个裸的置换群=-=,没什么压力. ; var n,i,j,minx,tem,now,tmin,len:longint; cursum,sum:int64; pos,num ...

Ramdisk文件系统的制作与调试运行

开发环境:Fedora 9交叉编译工具链:arm-linux-gcc 4.3.2 with EABI嵌入式Linux内核版本:2.6.29.4-FriendlyARM.昨天写贴子的时候具体记不清了,今 ...

第12章 添加对外部认证的支持 - Identity Server 4 中文文档&lpar;v1&period;0&period;0&rpar;

注意 对于任何先决条件(例如模板),首先要查看概述. 接下来,我们将添加对外部认证的支持.这非常简单,因为您真正需要的是ASP.NET Core兼容的身份验证处理程序. ASP.NET Core本身支 ...

Python中集合的操作

Python集合的基本详情 集合是无序的 集合是可变数据类型 集合属于不可哈希范围 集合自动去重 集合的操作 set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} ...

python的生成器(斐波拉契数列(Fibonacci))

代码: 函数版本: #斐波拉契数列(Fibonacci) def fib(max): n=0 a,b=0,1 while n < max: a,b = b,a+b n = n+1 return ...

Python 爬虫实例(7)—— 爬取 新浪军事新闻

我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8 import json import redis i ...

JAVA程序员&lowbar;常用英语

干程序员这行实在是离不开英语,干程序员是一项很辛苦的工作,要成为一个高水平的程序员尤为艰难.这是因为计算机软件技术更新的速度越来越快,而这些技术大多来源于英语国家,我们在引进这些技术时往往受到语言障碍 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值