csp月模拟测试 201604-3 路径解析

2024-04-10 05:38

本文主要是介绍csp月模拟测试 201604-3 路径解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

csp 201604-3 路径解析

  • 题目
  • 题解
    • C++代码

题目

题目
input&&output
input&&output
Sample

#input:
7
/d2/d3
/d2/d4/f1
../d4/f1
/d1/./f1
/d1///f1
/d1/
///
/d1/../../d2
#output:
/d2/d4/f1
/d2/d4/f1
/d1/f1
/d1/f1
/d1
/
/d2

题解

1 对于  "." ".." 操作和路径来说  我们发现是从最上面添加或删除 (很像先进后出)
因此本题我们可以利用栈这种数据结构
本题用到了 strtok 切割字符串(以 / 为分割符)
题目可知 多个 / 无效因此我们无需关注 只需要关注 / /之间的内容 ,因此这种分割是合理的
关于构造结果栈:1 相对路径 初始化为 原初始地址2 绝对路径 input的第一个为 / 此时我们初始化栈为空栈栈初始化后我们只需要根据分割内容 以及 是"." ".."还是进入某一个子文件夹来判断是不变还是出栈还是入栈。
输出时实际上时栈的逆序输出(递归)

C++代码

/*
strtok 
原型:char *strtok(char *str, const char *delim); 
功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 
描述:strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,
当strtok()在参数s的字符串中发现到参数delim的分割字符时 则会将该字符改为\0 字符。在第一次调用时,
strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回被分割出片段的指针。
*/ 
#include<iostream>
#include<string>
#include<stack>
#include<string.h>
using namespace std;
stack<string> m,org;//org最初状态  m 更正状态 void out(){if(!m.empty()){string now = m.top();m.pop();out();cout<<"/"<<now;}
} void add(string curr){if(curr=="") return;if(curr[0] == '/')m = stack<string>();//第一个为/从0开始 否则相对于当前目录 char* strc = new char[strlen(curr.c_str())+1];strcpy(strc,curr.c_str());string sep = "/";char* tmpstr = strtok(strc,sep.c_str());bool flag = true;while(tmpstr!=NULL){string tmp = string(tmpstr);if(tmp == ".."&&!m.empty()) m.pop(); else if(tmp == ".") ;else{if(tmp!="..")m.push(tmp);}tmpstr = strtok(NULL,sep.c_str());}delete[] strc;
}int main(){int p;cin>>p;string curr;cin>>curr;add(curr);org = m;cin.ignore();//吞空格等  getline读一行 while(p--){//cin>>curr;//不能读空格 getline(cin, curr);//读一行 m = org; add(curr);if(m.empty()) cout<<"/";else out();cout<<endl;}
} 

这篇关于csp月模拟测试 201604-3 路径解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890188

相关文章

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC