【ccf-csp题解】第7次csp认证-第三题-路径解析超详细题解-字符串模拟

本题思路来源于acwing ccfcsp认证课

题目描述

思路分析

首先,为了处理路径中的反斜杠符号,我们可以实现一个get函数,把一个路径中每一对反斜杠之间的内容存到vector<string>中,如果有连续的多个反斜杠则只看成一个

举个例子:

路径为:/d1/d2/d3  可以变为:vector<string>path;其中path[0]=="d1" path[1]=="d2" path[2]=="d3"

路径为:/d1//d2//d3/ 也可以变为:跟上面一样的path

如何实现这个函数呢?直接遍历即可:

vector<string>get(string str)
{vector<string>res;for(int i=0;i<str.size();i++){if(str[i]=='/')continue;int j=i+1;while(j<str.size()&&str[j]!='/')j++;//包含遍历结束和遇到下一个'/'两种情况res.push_back(str.substr(i,j-i));}return res;
}

对于给出的当前目录,我们就可以直接把其转换为vector<string>类型的cur了

紧接着,我们会输入n个样例,需要注意的是,样例有可能为空串(此时答案就会输出当前目录)

如果依然用cin,就会忽略这个空串,所以我们用getline

既然使用了getline,我们就需要在之前的cin后面加一个getchar()吸收回车

接下来,我们看如何处理样例

第一步依然是把输入的string用get函数进行路径拆分编程vector<string>类型的path,然后需要去判断这个path是绝对路径还是相对路径,只需要看第一个字符是不是'/'(当然还需要空串特判,这个就不多说了)

我们再实现一个函数:void walk(vector<string>cur,vector<string>path)

这个函数可以在cur的基础上把后面的path(可能包含"."和"..")添加进来,同时输出最终结果

如果是空串或者是相对路径,我们这样调用walk:

walk(cur,path);

如果是空串的话,path就是空,就会输出cur的路径形式

否则,就是输出把path加到cur之后的cur的路径形式

如果是绝对路径,我们这样调用walk:

walk(ab,path);

其中ab是空的vector<string>

最后我们看,如何实现walk函数

利用cpp的foreach写法,直接遍历path中每一个字符串:

如果是"."直接continue

如果是"..",如果cur是空,则continue(因为根目录的上一级还是根目录),否则就删掉一个cur中的string

如果是其它,直接把这个字符串push_back到cur的后面

最后,如果cur是空,输出"/",return 即可

否则,foreach遍历cur,每次输出一个string之前,别忘加一个'/'哦

一百昏代码

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int n;
string str;
vector<string>get(string str)
{vector<string>res;for(int i=0;i<str.size();i++){if(str[i]=='/')continue;int j=i+1;while(j<str.size()&&str[j]!='/')j++;res.push_back(str.substr(i,j-i));i=j;}return res;
}
void walk(vector<string>cur,vector<string>path)
{for(auto p:path){if(p==".")continue;else if(p==".."){if(cur.size())cur.pop_back();}elsecur.push_back(p);}if(cur.empty()){puts("/");return;}for(auto p:cur)cout<<"/"<<p;cout<<endl;
}
int main()
{cin>>n>>str;vector<string>cur=get(str);vector<string>ab;getchar();while(n--){string examp;getline(cin,examp);//因为有可能有空串,所有不用cinvector<string>path=get(examp);if(examp.size()&&examp[0]=='/')walk(ab,path);else walk(cur,path);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/155497.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集成学习的小九九

集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习的方法&#xff0c;通过结合多个基本模型的预测结果来进行决策或预测。集成学习的目标是通过组合多个模型的优势&#xff0c;并弥补单个模型的不足&#xff0c;从而提高整体性能。 集成学习的主要策略 在集成…

后厂村路灯在线签名网站,在线签名工具,IPA在线签名

IPA在线签名工具网站&#xff0c;在线实现IPA包签名 案例网站&#xff1a;在线签名 - 后厂村路灯https://sign.vx365.vip/ 用户可以自定义签名网站样式。 用户可以独立部署到自己服务器&#xff0c;使用自己的域名。 用户可以使用自己服务器&#xff0c;加快签名速度&#xf…

Java架构师缓存通用设计方案

目录 1 采用多级缓存2 缓存数据尽量前移3 静态化4 数据平衡策略5 jvm缓存的问题6 redis存放数据解决7 redis垂直拆分8 总结1 采用多级缓存 对于高性能的缓存设计呢,咱们前面按照专题详细去进行的讲解。那咱们现在结合着咱们实际的应用呢,再来确定一下咱们怎么去做这个高性能的…

关键词搜索1688商品列表数据接口,1688商品列表数据接口

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取1688网站上的商品页面。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#xff0c;1688网站…

如何在 Spring Boot 中实现容错机制

在 Spring Boot 中实现容错机制 容错机制是构建健壮和可靠的应用程序的重要组成部分。它可以帮助应用程序在面对异常或故障时保持稳定运行。Spring Boot提供了多种机制来实现容错&#xff0c;包括异常处理、断路器、重试和降级等。本文将介绍如何在Spring Boot中实现这些容错机…

大模型的超级“外脑”——向量数据库解决大模型的三大挑战

随着AI大模型产品及应用呈现爆发式增长,新的AI时代已经到来。向量数据库可与大语言模型配合使用,解决大模型落地过程中的痛点,已成为企业数据处理和应用大模型的必选项。在近日举行的华为全联接大会2023期间,华为云正式发布GaussDB向量数据库。GaussDB向量数据库基于GaussD…

TensorFlow入门(十八、激活函数)

激活函数是什么? 单个神经元的网络模型: 用计算公式表达如下: 即在神经元中,输入的x通过与权重w相乘,与偏置量b求和后,还被作用了一个函数,这个函数就是激活函数。 激活函数的作用 如果没有激活函数,整个神经元模型就是一个简单的线性方程。而在现实生活中,线性方程能解决的事…

广告牌安全监测,保障户外广告牌的安全与稳定

随着城市的发展和现代化&#xff0c;广告牌已经成为城市风景的一部分。然而&#xff0c;随之而来的是广告牌安全问题&#xff0c;因为它们暴露在各种天气和环境条件下&#xff0c;一旦掉落&#xff0c;可能对人们的生命和财产造成威胁。广告牌安全监测有效的解决了这一问题&…

Vue之VueX知识探索(一起了解关于VueX的新世界)

目录 前言 一、VueX简介 1. 什么是VueX 2. VueX的作用及重要性 3. VueX的应用场景 二、VueX的使用准备工作 1. 下载安装VueX 2. vuex获取值以及改变值 2.1 创建所需示例 2.2 将创建好的.vue文件页面显示 2.3 创建VueX的相关文件 2.4 配置VueX四个js文件 2.5 加载到vue示…

记录用命令行将项目打包成war包

记录用命令行将项目打包成war包 找到项目的pom.xml 在当前路径下进入cmd 输入命令 mvn clean package 发现报错了 Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project MMS: Error assembling WAR: webxml attribute is req…

Vuex存值取值与异步请求处理

目录 前言 一、Vuex简介 1.Vuex是什么 2.Vuex的核心概念 3.使用Vuex的好处 4.Vuex执行流程 二、Vuex的使用步骤 1.安装Vuex 2.创建store模块&#xff0c;分别维护state/actions/mutations/getters 3.使用Vuex存储值&#xff0c;获取值和改变值 1.state.js---存值 2.…

VRRP 虚拟路由器冗余协议的解析和配置

VRRP的解析 个人简介 原理和HSRP的差不多&#xff0c;少了一些状态就只有了三种状态 还有不同的就是VRRP严格按照抢占要求 一个VRRP组中具有最高优先级的设备成为Master路由器缺省优先级为100若优先级相同&#xff0c;具有最高接口IP地址最大的路由器成为Master路由器抢占(Pr…

Spring5应用之事务属性

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言事务…

手写Spring系列【一】IOC的简单实现笔记

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

docker 的数据管理

docker 容器中数据主要有两种方式 数据卷&#xff08; Data Volumes &#xff09; 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录往载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现…

【RabbitMQ 实战】11 队列的结构和惰性队列

一、 队列的结构 队列的组成&#xff1a; 队列由 rabbit_amgqueue_process 和 backing_queue两部分组成。rabbit_amqqueue_process负责协议相关的消息处理&#xff0c;即接收生产者发布的消息、向消费者交付消息、处理消息的确认 (包括生产端的 confirm 和消费端的 ack) 等。…

Java架构师部署架构设计

目录 1 导学2 部署架构设计和部署架构图2.1 服务器数量和配置2.2 服务器软件配置2.3 网络环境设计2.4 部署架构图2.5 部署说明文档2.6 部署清单2.7 画部署架构图3 实战整体部署架构设计4 节点部署说明列表5 总结1 导学 本章的主要内容是整体架构设计的核心之一,部署架构设计相…

web 基础和http 协议

一、域名 域名的概念 IP地址不易记忆&#xff0c;域名方便记住&#xff0c;以便于用户进行搜索访问 早期使用Hosts文件解析域名地址 缺点&#xff1a; ① 主机名称重复 ② 主机维护困难 DNS&#xff08;Domain Name System&#xff09;域名系统 ① 分布式 将一个大的数…

08. 机器学习- 线性回归

文章目录 线性回归 LINEAR REGRESSION 从本次课程开始&#xff0c;大部分时候我将不再将打印结果贴出来了&#xff0c;因为太占用篇幅。小伙伴可以根据我的输出执行敲一遍代码来进行学习和验证。 同样是为了节省篇幅&#xff0c;我也不会再一行行那么仔细的解释代码了&#xff…

每日leetcode_LCP01猜数字

每日leetcode_LCP01猜数字 记录自己的成长&#xff0c;加油。 题目出处&#xff1a;LCP 01. 猜数字 - 力扣&#xff08;LeetCode&#xff09; 题目 解题 class Solution {public int game(int[] guess, int[] answer) {int count 0;for (int i 0 ; i< guess.length; i){…