1. 程式人生 > >第五屆ccf認證考試第三題

第五屆ccf認證考試第三題

題目:

成成最近在搭建一個網站,其中一些頁面的部分內容來自資料庫中不同的資料記錄,但是頁面的基本結構是相同的。例如,對於展示使用者資訊的頁面,當用戶為 Tom 時,網頁的原始碼是  而當用戶為 Jerry 時,網頁的原始碼是  這樣的例子在包含動態內容的網站中還有很多。為了簡化生成網頁的工作,成成覺得他需要引入一套模板生成系統。

  模板是包含特殊標記的文字。成成用到的模板只包含一種特殊標記,格式為 {{ 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 }}</title>
</head>
<body>
<h1>{{ name }}</h1>
<p>Email: <a href="mailto:{{ email }}">{{ email }}</a></p>
<p>Address: {{ address }}
</p> </body> </html> name "David Beckham" email "[email protected]"

樣例輸出

<!DOCTYPE html>
<html>
<head>
<title>User David Beckham</title>
</head>
<body>
<h1>David Beckham</h1>
<p>Email: <a href="mailto:[email protected]
"
>
[email protected]</a></p> <p>Address: </p> </body> </html>

評測用例規模與約定
  0 ≤ m ≤ 100
  0 ≤ n ≤ 100
  輸入的模板每行長度不超過 80 個字元(不包含換行符)。
  輸入保證模板中所有以 {{ 開始的子串都是合法的標記,開始是兩個左大括號和一個空格,然後是變數名,結尾是一個空格和兩個右大括號。
  輸入中所有變數的值字串長度不超過 100 個字元(不包括雙引號)。
  保證輸入的所有變數的名字各不相同。

答案:

import java.util.HashMap;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap map = new HashMap();

        int m = sc.nextInt() + 1;
        int n = sc.nextInt() + 1;
        StringBuffer sb = new StringBuffer(sc.nextLine());
        while (--m != 0) {
            sb.append(sc.nextLine() + "\n");
        }

        while (--n != 0) {
            String str = sc.nextLine();
            String[] strs = str.split(" ");
            String str1 = String.valueOf(strs[1].toCharArray(), 1, strs[1]
                    .toCharArray().length - 2);
            map.put(strs[0], str1);
        }

        int brkNum = 0;
        int brkNum2 = 0;
        boolean prtAble = true;
        StringBuffer buff = new StringBuffer();
        for (char c : sb.toString().toCharArray()) {
            if (c == '{') {
                brkNum++;
                prtAble = false;
                if (brkNum == 2)
                    continue;
            }
            if (c == '}') {
                brkNum = 0;
                brkNum2++;
                if (brkNum2 == 2) {
                    continue;
                }
            }
            if (brkNum2 == 2) {
                brkNum2 = 0;
                prtAble = true;
                String s = (String) map.get(buff.toString().trim());
                if (s == null)
                    s = "";
                System.out.print(s);
                buff = new StringBuffer();
            }
            if (brkNum == 3) {
                System.out.print("{{{");
                brkNum = 0;
                prtAble = true;
                continue;
            }
            if (prtAble)
                System.out.print(c);
            else {
                if (brkNum == 2)
                    buff.append(c);
            }
        }
    }

}

以上程式碼為自己寫,僅供參考

相關推薦

ccf認證考試

題目: 成成最近在搭建一個網站,其中一些頁面的部分內容來自資料庫中不同的資料記錄,但是頁面的基本結構是相同的。例如,對於展示使用者資訊的頁面,當用戶為 Tom 時,網頁的原始碼是  而當用戶為 Jerry 時,網頁的原始碼是  這樣的例子在包含動態內容的網站中

CCF認證C++(號A)

輸入的第一行包含兩個整數n, m,分別表示影象矩陣的行數和列數。 接下來n行每行包含m個整數,表示輸入的影象。 評測用例規模與約定  1 ≤ n, m ≤ 1,000,矩陣中的數都是不超過1000的非負整數。

CCF計算機職業資格認證考試題解(C++)

試題名稱: 數列分段 試題編號: 201509-1 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述   給定一個整數數列,數列中連續相同的最長整數序列算成一段,問數列中共有多少段? 輸入格式   輸入的第一行包

計算機職業資格認證考試CCF (第一)

2015-09-01 問題描述   給定一個整數數列,數列中連續相同的最長整數序列算成一段,問數列中共有多少段? 輸入格式   輸入的第一行包含一個整數n,表示數列中整數的個數。   第二行包含n個

CCF csp九次認證考試 試題 許可權查詢

(一)題目要求 參考一篇C語言實現的博文,用java實現,經測試,結果正確,若有沒考慮到的地方,請各位博友指正 問題描述   授權 (authorization) 是各類業務系統不可缺少的組成部分,系統使用者通過授權機制獲得系統中各個模組的操作許可權。

CCF計算機職業資格認證考試題解(C++)

試題名稱 數位之和 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述   給定一個十進位制整數n,輸出n的各位數字之和。 輸入格式   輸入一個整數n。 輸出格式   輸出一個整數,表示答案。 樣例輸入

C#認證考試

pac png strip form ips pub 選擇 背景 第三章 ps:因為前面請假,沒能在規定時間做出總結,現在補上 如果你看了第三章的內容,你會發現第三章在著重跟我們講解對Windows窗體的設計,其中包括窗體背景、前景色、字體顏色、位

十次CCF認證 Markdown 字串處理

Markdown 是一種很流行的輕量級標記語言(lightweight markup language),廣泛用於撰寫帶格式的文件。例如以下這段文字就是用 Markdown 的語法寫成的: 這些用 Markdown 寫成的文字,儘管本身是純文字格式,然而讀者可以很容易地看出

備戰藍橋杯(真(迴文素數)

                                   迴文素數10301是個5位的素數。它有個特點,把數字倒過來還是它本身,具有這樣特徵的素數,我們稱之為:迴文素數。105011060111311這些都是5位的迴文素數。請你計算一下,像這樣的5位數的迴文素數,

六次CCF計算機軟體能力認證考試(

問題描述   某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。   現在,大臣們幫國王擬了一

CCF CSP十一次認證考試 20170917

第一題: 買醬油,買五瓶送兩瓶,買三瓶送一瓶。10元/瓶。給出錢數,問最多能買多少瓶醬油。 第二題:教師取放鑰匙,結構體排序,過載運算子。 第三題:檔案操作,字串處理,查詢。 第四題:有向圖的搜尋。能達到點v的點數 + 點v可達到的點數 == 總點數n - 1。詢問有多少個

2014藍橋杯JAVA本科B組試題猜字母

把abcd...s共19個字母組成的序列重複拼接106次,得到長度為2014的串。    接下來刪除第1個字母(即開頭的字母a),以及第3個,第5個等所有奇數位置的字母。    得到的新串再進行刪除奇數位置字母的動作。如此下去,最後只剩下一個字母,請寫出該字母。答案是一個小寫

小朋友排隊--藍橋杯

code als ann 沒有 clas art 相對 pri rgs 第一種,直接思考的方法,不知對不正確: /* * 標題:小朋友排隊 n 個小朋友站成一排。如今要把他們按身高從低到高的順序排列,可是每次僅僅能交換位置相鄰的兩個小朋友。 每一個小朋友都有一個

算法筆記_206:藍橋杯軟件類決賽真(Java語言A組)

理論 cnblogs 條件 font 9.png 生成 true 突變 幻方 目錄 1 海盜分金幣 2 六角幻方 3 格子放雞蛋 4 排列序數 5 冪一矩陣 6 供水設施 1 海盜分金幣 有5個海盜,相約進行一次帆船比賽。 比賽中天氣發生突變,他們被沖

賀一夫補選為永州市人民代表大會代表o0

ddp pvc nap llc gym olt cs6 waf ner 賀一夫補選為永州市第五屆人民代表大會代表http://r393j9.zfohn.cn/http://op57mc.zfohn.cn/http://h6329v.zfohn.cn/http://e3n9m

2017中國(河南)創業者大會成功落幕

搭建 交流 表示 共享 創新創業 前行 http 大會 總經理 “河南的創業者,世界的大會”!2017年10月14日,由鄭州市景安網絡科技股份有限公司協辦的2017第五屆中國(河南)河南創業者大會,在萬眾期待中迎來了盛大開幕! 本屆大會,全國共享經濟領域優秀企業代表、創投

藍橋杯總結

amp 說明文 tro ... 註意 家裏 例如 多少 .... 第一題 啤酒和飲料 啤酒每罐2.3元,飲料每罐1.9元。小明買了若幹啤酒和飲料,一共花了82.3元。 我們還知道他買的啤酒比飲料的數量少,請你計算他買了幾罐啤酒。 註意:答案是一個整數。請

藍橋杯大賽個人賽(軟件類)省賽真

turn 滿足 方法 省賽 left n-1 遊戲 藍橋杯 0ms 第一題 輸入一個字符串,求它包含多少個單詞。單詞間以一個或者多個空格分開。第一個單詞前,最後一個單詞後也可能有0到多個空格。比如:" abc xyz" 包含兩個單詞,"ab c xyz

NYOJ 542 試制品(河南省省賽)

ret 找到 stream 同時 利用 CA tor for space 解法不唯一,但是還是set好理解而且用著爽,代碼註釋應該夠詳細了 #include<stdio.h> #include<string.h> #include<math.

藍橋杯 - 歷屆試題() - 蘭頓螞蟻(模擬)

http://lx.lanqiao.cn/problem.page?gpid=T125 時間限制:1.0s   記憶體限制:256.0MB 問題描述   蘭頓螞蟻,是於1986年,由克里斯·蘭頓提出來的,屬於細胞自動機的一種。   平面上的正方形格子被填上黑色或白色。在其