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语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux美化原理,x-window字体
- 下一篇: 内蒙古高考2021年成绩查询,内蒙古招生