• 模板生成_100


    字符串转换。这个还会一些。。写写调试调试。。就这样

    题目:

    模板是包含特殊标记的文本。成成用到的模板只包含一种特殊标记,格式为 {{ 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 "david@beckham.com"




    样例输出
    <!DOCTYPE html>
    <html>
    <head>
    <title>User David Beckham</title>
    </head>
    <body>
    <h1>David Beckham</h1>
    <p>Email: <a href="mailto:david@beckham.com">david@beckham.com</a></p>
    <p>Address: </p>
    </body>
    </html>




    评测用例规模与约定
      0 ≤ m ≤ 100
      0 ≤ n ≤ 100
      输入的模板每行长度不超过 80 个字符(不包含换行符)。
      输入保证模板中所有以 {{ 开始的子串都是合法的标记,开始是两个左大括号和一个空格,然后是变量名,结尾是一个空格和两个右大括号。
      输入中所有变量的值字符串长度不超过 100 个字符(不包括双引号)。
      保证输入的所有变量的名字各不相同。


    100分代码如下:

    #include<iostream>
    #include<string>
    
    using namespace std;
    const int N = 100;
    string str1[N + 1], str2[N + 1];
    
    struct Var
    {
    	string name;
    	string val;
    } var[N + 1];
    
    //string par(string str,Var var[N+1],int n)
    //{
    //	for(int i=0; i<n; i++)
    //	{
    //		if(str == var[i].name)	return var[i].val;
    //	}
    //}
    
    int main()
    {
    	int m, n, w;
    	int pla1, pla2,index;
    	string pla3,str3;//记录{ }位置
    	cin >> m >> n;
    	string str, temp, temp1,temp2;
    	int a;
    	getline(cin, str);
    	for (int i = 0; i < m; i++)
    	{
    		getline(cin, str1[i]);
    	}
    	for (int i = 0; i<n; i++)
    	{
    		getline(cin, str);
    		a = str.find(" ");
    		var[i].name = str.substr(0, a);
    		var[i].val = str.substr(a + 2, str.length() - 3 - a);
    	}
    	for (int i = 0; i<m; i++)
    	{
    		if (str1[i].find("{{") == -1)	str2[i] = str1[i];
    		else
    		{
    			str2[i] = str1[i].substr(0, str1[i].find("{{"));
    			temp = str1[i].substr(str1[i].rfind("}}") + 2);
    			while (str1[i].find("{{") != -1)
    			{
    				pla1 = str1[i].find("{{");
    				pla2 = str1[i].find("}}");
    				pla3 = str1[i].substr(pla1 + 3, pla2 - pla1 - 4);
    				w = 0;
    				for (int j = 0; j<n; j++)
    				{
    					if (pla3 == var[j].name)
    					{
    						temp1 = var[j].val;
    						w = 1;
    						//break;
    					}
    				}
    				if (w == 0)	temp1 = "";
    				str2[i] += temp1;
    				//str2[i] += par(pla3,var,n);
    				str3 = str1[i].substr(pla2);
    				if (str3.find("{{") != -1)
    				{
    					index = str3.find("{{");
    					temp2 = str1[i].substr(pla2 + 2, index - 2);
    					str2[i] += temp2;
    				}
    				str1[i].erase(pla1, pla2 - pla1+2);
    			}
    			str2[i] += temp;
    		}
    	}
    	for (int i = 0; i<m; i++)
    	{
    		cout << str2[i] << '\n';
    	}
    	return 0;
    }


  • 相关阅读:
    口袋摸球
    后渗透(四)数据包捕获
    后渗透(二)权限提升
    文件上传11-21
    MySQL之UDF提权
    《白帽子讲Web安全》读书笔记(一)
    XSS盲打获取cookies&&XSS钓鱼&&XSS键盘记录
    nginx目录穿越漏洞复现&&nginx目录遍历漏洞复现
    python教程(一)·简介
    DataPipeline如何实现数据质量管理?
  • 原文地址:https://www.cnblogs.com/yunet/p/14967497.html
Copyright © 2020-2023  润新知