csp真题字符串匹配c语言,CCF CSP认证考试历年真题 模板生成系统 C语言实现

试题编号:201509-3

试题名称:日期计算 时间限制:1.0s 内存限制:256.0MB

问题描述:

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

317d9305c6f14dac2efa00018332b7b4.png

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

439ef272ff8559741e326480e58a2ed3.png

这样的例子在包含动态内容的网站中还有很多。为了简化生成网页的工作,成成觉

得他需要引入一套模板生成系统。

模板是包含特殊标记的文本。成成用到的模板只包含一种特殊标记,格式为 {{ VAR }},其中 VAR 是一个变量。该标记在模板生成时会被变量 VAR 的值所替代。例如,如果变量 name = "Tom",则 {{ name }} 会生成 Tom。具体的规则如下:   ·变量名由大小写字母、数字和下划线 (_) 构成,且第一个字符不是数字,长度

不超过 16 个字符。

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

·变量的值是字符串。

·如果标记中的变量没有定义,则生成空串,相当于把标记从模板中删除。   ·模板不递归生成。也就是说,如果变量的值中包含形如 {{ VAR }} 的内容,不

再做进一步的替换。

输入格式

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

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

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

范围 32, 33, 35-126)。

输出格式

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

样例输入 11 2

html>

User {{ name }}

{{ name }}

Address: {{ address }}

name "David Beckham" email "david@beckham.com"

样例输出

html>

User David Beckham

David Beckham

Address:

评测用例规模与约定   0 ≤ m ≤ 100   0 ≤ n ≤ 100

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

输入保证模板中所有以 {{ 开始的子串都是合法的标记,开始是两个左大括号和一

个空格,然后是变量名,结尾是一个空格和两个右大括号。

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

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

分析:

题目本身逻辑不能,这题主要考验对程序输入,输出,字符串的运用。这里我用C语言来写,主要的scanf,printf的格式控制符的了解,这里给出两个不错的链接:

http://blog.csdn.net/qingkong8832/article/details/6667701

http://blog.csdn.net/sdhfll/article/details/1892926

代码在此:

#include#include#define F_PATH "C:\\Users\\Administrator\\Desktop\\C\\data.txt"

#define ADDITION 10 //字符串添加多余空间防止溢出

typedef struct{

char value[80 + ADDITION];

}late;// 一行模板

typedef struct{

char key[100 + ADDITION];

char value[100 + ADDITION];

}variable;// 一个变量

int main()

{

int m, n;

late str[100 + ADDITION];

variable var[100 + ADDITION];

char ch;

scanf("%d %d", &m, &n);

/*while( (ch=getchar()) != '\n' )

continue;*/

ch = getchar();// 必须加这个,因为%[]读取时会把上一个\n给读取到进去然后跳过直接空字符串。不用ch = getchar();就得在上一个scanf()改成 scanf("%d %d\n", &m, &n)。又或者把ch = getchar();换成上面那个我while循环

for(int i = 0; i < m; i ++)

{

scanf("%[^\n]%*c", str[i].value);//接收一行

}

for(int i = 0; i < n; i ++)

{

scanf("%s %*c%[^\"]", var[i].key, var[i].value);

scanf("%*c"); // %[^\"] 不会接收后面的\",不过\"还是在输入缓存中,在获取变量的值后需要把这个\"从输入缓存中去掉以免影响下一次

}

for(int i = 0; i < m; i ++)//循环输出m行模板

{

int len = strlen(str[i].value);

for(int j = 0; j < len; j ++)//循环判断没行模板的每个字符

{

if(str[i].value[j] == '{' && str[i].value[j+1] == '{')//由于没有嵌套,所有直接判断即可

{

char strtemp[100];

j += 3;//跳入模板变量区域

int u = 0;

while(str[i].value[j] != ' ')//获取模板里的变量

{

strtemp[u ++] = str[i].value[j];

j ++;

}

for(int k = 0; k < n; k ++)//查找对应的变量替代输出

{

if(strcmp(strtemp, var[k].key) == 0)

{

printf("%s", var[k].value);

break;

}

}

j += 3;//跳出模板变量区域

}

else

{

printf("%c", str[i].value[j]);//无需替换字符直接输出

}

}

printf("\n");

}

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

osgi架构与linux_OSGi:进入微服务架构的门户

osgi架构与linux在构建可扩展&#xff0c;可靠的分布式系统的背景下&#xff0c;“模块化”和“微服务体系结构”这两个术语如今经常出现。 众所周知&#xff0c;Java平台本身在模块化方面很弱&#xff08; Java 9将通过交付Jigsaw项目来解决此问题&#xff09;&#xff0c;这为…

引入我们全新的YouTube频道进行视频课程编程

嘿&#xff0c;极客们&#xff0c; 收到社区的反馈并紧贴行业发展趋势&#xff0c;我们非常高兴宣布推出全新的Youtube频道 &#xff01; 在我们的频道上&#xff0c;我们将主持与Java编程有关的视频课程&#xff0c;但通常也会进行软件开发。 我们将介绍代码演练以及完整的…

田忌赛马c语言程序设计,还是杭电1052田忌赛马

已结贴√问题点数&#xff1a;20 回复次数&#xff1a;2还是杭电1052田忌赛马//昨天那个算法漏洞挺大&#xff0c;但我重新构思了&#xff0c;但运行到312ms还是wa了。我测试了许多数据&#xff0c;结果是对的&#xff0c;郁闷了&#xff0c;谁能救救我啊&#xff1f;#include&…

启动jboss_3种启动JBoss BPM流程的基本方法

启动jboss这一集提示和技巧将帮助您了解根据需要启动流程实例的最佳方法。 规划项目可能包括流程项目&#xff0c;但是您是否考虑过可以启动流程的各种方式&#xff1f; 也许您的JBoss BPM Suite在您的体系结构中本地运行&#xff0c;也许您在云中运行&#xff0c;但是无论它…

c语言中rand()%900,c语言 n=rand()%5是什么意思

rand()函数会产生范围为0至32767的随机数&#xff0c;% 让它与5求余&#xff0c;变成0至4的随机数&#xff0c;不过每次启动程序产生的随机数都相等&#xff0c;在用srand(unsigned int)输入种子数后产生的才不一样&#xff0c;一般都用的 srand((unsigned int)time(NULL)) 产生…

c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现

任何一个对C稍稍有了解的人都知道malloc、calloc、free。前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间&#xff0c;然后可以通过free释放&#xff0c;但是&#xff0c;同时也会有很多人对其背后的实现机制不了解。这篇文章则是通过介绍这三个函数&#xff0c;并简单…

c语言怎么循环输入单个字符,c语言 帮我检查一下 输入一段文字,每行用回车结束,文字输入完毕可以使用某个特殊字符作为结束,...

c语言 帮我检查一下 输入一段文字&#xff0c;每行用回车结束&#xff0c;文字输入完毕可以使用某个特殊字符作为结束&#xff0c;0HIDE152019.04.28浏览4次分享举报c语言输入一段文字&#xff0c;每行用回车结束&#xff0c;文字输入完毕可以使用某个特殊字符作为结束&#xf…

gradle发布jar_使用Gradle将JAR工件发布到Artifactory

gradle发布jar因此&#xff0c;我浪费了一两天&#xff08;只是投资&#xff09;来了解如何使用Gradle将JAR发布到本地运行的Artifactory服务器。 我使用Gradle Artifactory插件进行发布。 我迷失在无穷循环中&#xff0c;包括各种版本的各种插件和执行各种任务。 是的&#xf…

最新的20多个JMS面试问答(2020)

快速浏览JMS&#xff08;Java消息服务&#xff09;常见问题面试问题和答案。 2020年以来的最新问题已添加到列表中。 1.简介 在本教程中&#xff0c;我们将了解2020年常见的JMS面试问题。作为面试的一部分&#xff0c;如果您有6年以上的经验&#xff0c;就有机会在JMS领域提出…

c语言中组合函数,排列组合c怎么算 公式是什么

排列有两种定义&#xff0c;但计算方法只有一种&#xff0c;凡是符合这两种定义的都用这种方法计算。定义的前提条件是m≦n&#xff0c;m与n均为自然数。下面介绍排列组合c的计算方法及公式&#xff0c;供参考。排列组合中A和C怎么算排列A(n,m)n(n-1).(n-m1)n!/(n-m)!(n为下标,…

使用Spring WebFlux构建反应性REST API –第1部分

在本文中&#xff0c;我们将看到如何使用Spring WebFlux构建响应式REST API。 在进入反应式API之前&#xff0c;让我们看看系统是如何发展的&#xff0c;传统REST实现遇到的问题以及现代API的需求。 如果您查看从旧版系统到下文所述的现代系统的期望&#xff0c; 现代系统的期…

gradle引入依赖:_Gradle善良:获得更多的依赖性见解

gradle引入依赖:在我们的大多数项目中&#xff0c;我们都依赖于其他代码&#xff0c;例如库或其他项目。 Gradle有一个不错的DSL来定义依赖关系。 依赖性在依赖性配置中分组。 这些配置可以自己创建&#xff0c;也可以通过插件添加。 一旦定义了依赖关系&#xff0c;我们就可以…

android popupwindow 调用方法,Android PopUpWindow使用详解

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;一、概述1、PopupWindow与AlertDialog的区别最关键的区别是AlertDialog不能指定显示位置&#xff0c;只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以指定显示位置…

高效应用程序的7个JVM参数

在撰写本文时&#xff08;2020年3月&#xff09;&#xff0c;围绕垃圾收集和内存&#xff0c;您可以将600多个参数传递给JVM。 如果您包括其他方面&#xff0c;则JVM参数总数将很容易超过1000个。 &#x1f60a;。 任何人都无法消化和理解太多的论据。 在本文中&#xff0c;我们…

junit:junit_简而言之,JUnit:另一个JUnit教程

junit:junit为什么还要另一个JUnit教程&#xff1f; 对于Java世界中的开发人员而言&#xff0c; JUnit似乎是最受欢迎的测试工具 。 因此&#xff0c;难怪就此主题已经写了一些好书 。 但是我仍然经常遇到程序员&#xff0c;他们至多对这个工具及其正确用法都不太了解。 因此&…

用Java将文件读入字节数组的7个示例

嗨&#xff0c;大家好&#xff0c;Java程序员经常在现实世界中遇到编程问题&#xff0c;他们需要将文件中的数据加载到字节数组中&#xff0c;该文件可以是文本或二进制文件。 一个示例是将文件的内容转换为String以便显示。 不幸的是&#xff0c;用于表示文件和目录的Java的Fi…

如何使用Java创建AWS Lambda函数

在本教程中&#xff0c;我们将看到如何在Java中创建AWS Lambda函数&#xff0c;我告诉你&#xff0c;这样做非常容易…… 基本上&#xff0c;我们可以通过三种方式创建AWS Lambda函数&#xff1a; –通过实现RequestHandler接口 –通过实现RequestStreamHandler接口 –自定义…

android 主流机型排行榜,10月份Android热门手机机型Top 50排行榜

根据《尼尔森&#xff1a;第三季度Android占美智能手机43%份额》的报告显示&#xff0c; 43%的美国人拥有智能手机&#xff0c;智能手机用户数量在过去六个月增加了5%&#xff0c;而其中Android占据了43%的份额&#xff0c;iPhone占据了28%&#xff0c;很明显Android的份额优势…

ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)

ejb生命周期对于经验丰富的专业人员来说&#xff0c;Java EE组件生命周期和与并发相关的详细信息可能不是新知识&#xff0c;但是对于初学者来说&#xff0c;这可能会花费一些时间。 就EJB而言&#xff0c;了解其生命周期 &#xff08;以及相关的并发场景&#xff09;对于确保…

Apache Camel 3.1 – XML路由的快速加载

Camel 3.1中添加的一项功能是能够更快地加载XML路由。 这是我们使Camel变得更小&#xff0c;更快的整体工作的一部分。 您可能会说ewww XML。 但坦率地说&#xff0c;有很多Camel用户使用XML定义路由来构建应用程序。 在Camel 2.x中&#xff0c;您将不得不使用Spring或OSGi Bl…