【ccf-csp题解】第5次csp认证-第三题-模板生成系统-字符串模拟

news/2024/7/5 2:09:26

题目描述

思路分析

这个是一个简单的字符串模拟题,但蕴藏了一些细节值得挖掘,故写于博客之中进行记录。

第一、关于数据的读入

对于前m行,直接使用getline函数进行读入即可,注意在读取完m和n之后,要写一个getchar()吸收回车

对于接下来的n行,需要读入两个内容,第一是变量名,第二是变量值,由于变量名和变量值之间有空格,所以对于变量名的读取直接使用cin即可,对于变量值,由于要读取的内容在双引号之间,所以可以使用如下技巧读取(来自y总网课)

 string key, value;
 cin >> key;
 char c;
 while (c = getchar(), c != '\"');
 while (c = getchar(), c != '\"') value += c;
 vars[key] = value;

第二、如何替换

我自己写的代码是用了一堆string自带的函数,包括replace、substr和find

最后在csp网站上提交是90分,显示超时,可能是写的太暴力导致的

90分代码放下面,大家看个乐子就好

#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
int m,n;
vector<string>alls;
map<string,string>get_value;
int main()
{
    scanf("%d%d",&m,&n);
    getchar();
    for(int i=1;i<=m;i++)
    {
        string temp;
        getline(cin,temp);
        alls.push_back(temp);
    }
    for(int i=1;i<=n;i++)
    {
        string temp;
        getline(cin,temp);
        int index=temp.find(' ');
        string sub1=temp.substr(0,index);
        string sub2=temp.substr(index+2,temp.length()-index-3);
        get_value[sub1]=sub2;
    }
    for(int i=0;i<m;i++)
    {
        int index1,index2;
        do
        {
            index1=alls[i].find("{{ ");
            if(index1!=-1)
            index2=alls[i].find(" }}",index1+1);
            else break;
            if(index2==-1)break;
            string name=alls[i].substr(index1+3,index2-index1-3);
            if(!get_value.count(name))
            {
                alls[i].replace(index1,index2-index1+3,"");
            }
            else
            alls[i].replace(index1,index2-index1+3,get_value[name]);
        }while(index1!=-1&&index2!=-1);
        cout<<alls[i]<<endl;
    }
    return 0;
}

y总一百分代码

#include<iostream>
#include<unordered_map>
#include<vector>
#include<string>
using namespace std;
vector<string>strs;
unordered_map<string,string>vals;
int n,m;
int main()
{
    cin>>m>>n;
    getchar();
    while(m--)
    {
        string str;
        getline(cin,str);
        strs.push_back(str);
    }
    while(n--)
    {
        string key,value;
        char c;
        cin>>key;
        while(c=getchar(),c!='\"');
        while(c=getchar(),c!='\"')value+=c;
        vals[key]=value;
    }
    for(auto &str:strs)
    {
        for(int i=0;i<str.size();i++)
        {
            if(i+1<str.size()&&str[i]=='{'&&str[i+1]=='{')
            {
                int j=i+2;
                string key;
                while(str[j]!=' '||str[j+1]!='}'||str[j+2]!='}')key+=str[++j];
                cout<<vals[key];
                i=j+2;
            }
            else
            cout<<str[++];
        }
        cout<<endl;
    }

    return 0;
}


http://lihuaxi.xjx100.cn/news/1572913.html

相关文章

最长连续递增子序列

给定一个顺序存储的线性表&#xff0c;请设计一个算法查找该线性表中最长的连续递增子序列。例如&#xff0c;(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。 输入格式: 输入第1行给出正整数n&#xff08;≤105&#xff09;&#xff1b;第2行给出n个整数&#xff0c;…

微调大模型工具-LoRA

介绍 微调 在机器学习领域&#xff0c;大型模型已成为解决各种问题的首选解决方案。从自然语言处理到计算机视觉&#xff0c;这些计算能力的庞然大物都表现出了无与伦比的性能。然而&#xff0c;这种性能实际上是有代价的。微调这些大型模型以适应特定任务或领域是一个资源密…

web前端项目案例实战

之前也有使用vite2vue3electronc创建桌面端项目&#xff0c;不过 vue-cli-plugin-electron-builder 脚手架插件构建的项目electron版本只有13.x。如今electron版本都到了24&#xff0c;显然不能再用之前的方法创建项目了。于是闲暇时间就捣鼓了electron24vite4搭建桌面程序&…

Ubantu GoLand安装

下载GoLand 下载Linux版的压缩包 解压到usr/local tar -C /usr/local -xzf gox.x.x.linux-amd64.tar.gz -xzf 后面是下载goland的全名 确保golang 已经正常安装&#xff0c;参考Golang Linux 安装与环境变量配置_一零壹0的博客-CSDN博客 启动GoLand cd 到解压目录下 cd …

数据链路层协议

文章目录 数据链路层协议0. 数据链路层解决的问题1. 以太网协议(1) 认识以太网(2) 以太网帧格式<1> 两个核心问题 (3) 认识MAC地址(4) 局域网通信原理(5) MTU<1> 认识MTU<2> MTU对IP协议的影响<3> MTU对UDP协议的影响<4> MTU对TCP协议的影响<…

Flex布局实战

Flex布局简介 Flex布局是一种用于网页布局的现代CSS布局模型。它使用flex容器和flex项来实现灵活的、响应式的布局。Flex容器是父元素&#xff0c;内部包含一系列的flex项。Flex项可以根据指定的规则自动调整尺寸和位置&#xff0c;以适应不同的屏幕大小和设备类型。 Flex布局…

12大常用自动化测试工具,请记得转发收藏!

常用自动化测试工具 1、Appium AppUI自动化测试 Appium 是一个移动端自动化测试开源工具&#xff0c;支持iOS 和Android 平台&#xff0c;支持Python、Java 等语言&#xff0c;即同一套Java 或Python 脚本可以同时运行在iOS 和Android平台&#xff0c;Appium 是一个C/S 架构&…

windows下实现mysql8的主从复制

1、下载mysql8的安装包 MySQL :: Download MySQL Community Server 2、放到指定目录进行解压&#xff0c;更改名称为mysql-8.1.0-winx64-master,并复制一份作为从数据库 3、在bin目录下创建一个my.ini文件 添加如下内容 [mysqld] basedir"D:/soft/mysql/mysql-8.1.0-win…