日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2023/12/2 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 csp真题字符串匹配c语言,CCF CSP认证考试历年真题 模板生成系统 C语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

試題編號:201509-3

試題名稱:日期計算 時間限制:1.0s 內存限制:256.0MB

問題描述:

成成最近在搭建一個網站,其中一些頁面的部分內容來自數據庫中不同的數據記錄,但是頁面的基本結構是相同的。例如,對于展示用戶信息的頁面,當用戶為?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

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;

}

總結

以上是生活随笔為你收集整理的csp真题字符串匹配c语言,CCF CSP认证考试历年真题 模板生成系统 C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。