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

news2024/11/17 21:36:58

题目描述

思路分析

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

第一、关于数据的读入

对于前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://www.coloradmin.cn/o/1040020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

德大黄鱼开捕 年产量20万吨 京东超市多举措保障黄鱼品质

作为“中国大黄鱼之都”&#xff0c;宁德大黄鱼占全国大黄鱼总产值产量均在90%以上。有关方面预计&#xff0c;今年全年宁德大黄鱼产量达20万吨&#xff0c;年增产10%&#xff0c;直接经济产值超百亿元。 宁德大黄鱼开捕活动&#xff0c;由宁德市政府、宁德渔业协会、京东超市…

Mooctest

开发者 测试框架junit 1.字符串不能除 2.a给了c 3. 4. 5.输入是否>0 6.注释

笔试强训Day3

学了一坤时Linux&#xff0c;赶紧来俩道题目放松放松。 T1&#xff1a;在字符串中找出连续最长的数字串 链接&#xff1a;在字符串中找出连续最长的数字串__牛客网 输入一个字符串&#xff0c;返回其最长的数字子串&#xff0c;以及其长度。若有多个最长的数字子串&#xff0c…

CSAPP Attack Lab

CSAPP Attack Lab 历经一个多星期&#xff0c;之前写完第一部分就一直放着了&#xff0c;稍微补充了一下知识&#xff0c;差点让第二部分吓到&#xff0c;没想到做起来还挺简单哈 这次任务是让我们当一个远古时期的萌新黑客&#xff0c;是不是很酷呀 这次上来才发现看不懂让…

Unity之Hololens如何升级MRTK内置shader支持URP

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

Linux学习第19天:Linux并发与竞争实例: 没有规矩不成方圆

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 先说点题外话&#xff0c;上周参加行业年会&#xff0c;停更了一周。接下来的周五就要开启国庆中秋双节模式&#xff0c;所以有的时候&#xff0c;尤其是工作以后…

代码随想录算法训练营day6| 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

目录 一、哈希表理论 hash function ​编辑hash collision 常见哈希结构 1&#xff09;set 2&#xff09;map 二、&#xff08;leetcode 242&#xff09;有效的字母异位词 三、&#xff08;leetcode 349&#xff09;两个数组的交集 四、&#xff08;leetcode 202&…

移动应用中的视频直播美颜sdk集成指南

在今天的移动应用生态系统中&#xff0c;视频直播已经成为了与用户互动、分享体验和传播信息的强大工具。与此同时&#xff0c;直播美颜技术也逐渐崭露头角&#xff0c;让直播主和用户在镜头前呈现出最佳状态。本文将为您提供一份详尽的指南&#xff0c;教您如何在移动应用中集…

Day56:组件库封装-TypeScript入门

配置 安装tsc工具进行编译 npm i typescript -g 查看版本号&#xff1a;tsc -v 编译ts代码-需要使用tsc编译之后才能运行&#xff0c;TS为JS的衍生&#xff0c;浏览器不能直接识别TS语法&#xff1a;tsc xxx.ts 运行ts代码&#xff1a;node xxx.js 或者直接运行ts代码——t…

怎么将aac转换成mp3格式?

怎么将aac转换成mp3格式&#xff1f;AAC&#xff08;它的全称为Advanced Audio Coding&#xff09;是一种高级音频编码格式。它采用了数字音频压缩算法&#xff0c;旨在提供更高的音频质量和更低的比特率。AAC和Mp3一样都是一种有损压缩算法&#xff0c;通过移除人耳无法察觉的…

林木种苗生产vr虚拟实训教学降低培训等待周期

林业种植管理在保护水土流失、气候变化及经济社会发展中发挥重要的作用&#xff0c;林业教学往往需要进入林区进行实操察验&#xff0c;在安全性、时间及效率上难以把控&#xff0c;因此有更多林业畜牧院校创新性地引进VR虚拟现实技术。 在林业领域&#xff0c;实地调查是获取准…

【蓝桥杯选拔赛真题63】Scratch云朵降雨 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析

目录 scratch云朵降雨 一、题目要求 编程实现 二、案例分析 1、角色分析

批量查询中通快递单号,高效省时

您是否曾经为了查询多个中通快递单号而感到烦恼&#xff1f;传统的查询方式需要您一个个手动输入单号&#xff0c;不仅费时还容易出错。现在&#xff0c;有一个简单的方法可以解决这个问题&#xff0c;那就是使用固乔快递查询助手软件进行批量查询。下面就让我们一起来了解具体…

DockerKubernetes ❀ Service下Port端口区分

文章目录 概述案例 概述 在Kubernetes中&#xff0c;Service&#xff08;svc&#xff09;是一种抽象机制&#xff0c;用于将一组 Pod 暴露给其他应用程序或服务。Service 可以有三种类型的端口&#xff1a; nodePort&#xff1a;这是 Service 在节点上公开的端口。可以使用此…

Quartz 体系结构

Quartz的体系结构 Quartz的重要组件 Scheduler 用于与调度程序交互的主程序接口。 Scheduler调度程序-任务执行计划表&#xff0c;只有安排进执行计划的任务Job&#xff08;通过scheduler.scheduleJob方法安排进执行计划&#xff09;&#xff0c;当它预先定义的执行时间到了的时…

25626-2018 冲击压路机 课堂随笔

声明 本文是学习GB-T 25626-2018 冲击压路机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了冲击压路机(以下简称压路机)的术语和定义&#xff0c;分类&#xff0c;要求&#xff0c;试验方法&#xff0c;检验规则&#xff0c;标…

Vue3+Elementplus引入面包屑功能

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN博客专家&#xff0c;阿里云签约博主&#xff0c;InfoQ签约博主&#xff0c;华为云云享专家&#xff0c;51CTO明日之星 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a…

it设备系统联网监控

随着网络的兴起和应用的深入&#xff0c;网络安全问题日益突出。在这种环境下&#xff0c;IT网络监控应运而生。它就像一个无形的守护者&#xff0c;密切关注我们的网络空间&#xff0c;确保我们的信息安全。  简单来说&#xff0c;IT网络监控就是通过技术手段对网络进行实时…

Cookie 和 Session机制

Cookie HTTP 协议自身是属于 "无状态" 协议. "无状态" 的含义指的是: 默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系. 但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的. 例如登陆网站成功后, 第二次访…

C++ -- IO流

目录 C语言的输入与输出 CIO流 C标准IO流 C文件IO流 文件常见的打开方式如下 以二进制的形式操作文件 以文本的形式操作文件 读写结构体 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输…