【C++】每日一题 71 简化路径

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,‘//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,‘…’)均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

始终以斜杠 ‘/’ 开头。
两个目录名之间必须只有一个斜杠 ‘/’ 。
最后一个目录名(如果存在)不能 以 ‘/’ 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 ‘.’ 或 ‘…’)。
返回简化后得到的 规范路径 。

#include <iostream>
#include <sstream>
#include <vector>std::string simplifyPath(std::string path) {std::vector<std::string> stack;std::stringstream ss(path);std::string dir;while (getline(ss, dir, '/')) {if (dir.empty() || dir == ".") {// Do nothing (current directory or empty)} else if (dir == "..") {if (!stack.empty()) {stack.pop_back();}} else {stack.push_back(dir);}}std::string result = "";for (const std::string& dir : stack) {result += "/" + dir;}return result.empty() ? "/" : result;
}int main() {std::string path = "/home//foo/";std::string simplifiedPath = simplifyPath(path);std::cout << "Simplified Path: " << simplifiedPath << std::endl;return 0;
}

在这段 C++ 代码中,我们使用一个字符串流 std::stringstream 来逐个读取路径中的每个目录名,并根据规则进行处理。具体步骤如下:

  1. 将路径按照 ‘/’ 分割,并遍历每个目录名 dir。
  2. 如果 dir 为空或为.,表示当前目录,不做任何操作。
  3. 如果 dir 为…,表示返回上一级目录,则弹出栈顶元素。
  4. 否则,将非空且不为.或…的目录名压入栈中。
  5. 最后,我们将栈中的目录名按照规范拼接起来,并返回简化后的规范路径。

补充:
std::stringstream 是 C++ 标准库中的一个类,用于在内存中创建一个可读写的字符序列。它主要用于将各种数据类型(如整数、浮点数、字符串等)转换为字符串,或者将字符串解析为各种数据类型。

std::stringstream 类通常用于以下两个方面:

数据类型转换: 可以使用 std::stringstream 将其他数据类型(如整数、浮点数)转换为字符串,或将字符串转换为其他数据类型。
字符串操作: 可以将多个字符串拼接成一个字符串,或者从一个字符串中提取需要的信息。
在 C++ 中,std::stringstream 提供了类似于输入输出流的操作符 << 和 >>,这使得它可以方便地用于将数据类型转换为字符串或从字符串中提取数据。
下面是一个简单的示例,演示如何使用 std::stringstream 将整数转换为字符串

#include <iostream>
#include <sstream>int main() {int num = 42;std::stringstream ss;ss << num; // 将整数转换为字符串std::string strNum = ss.str(); // 获取转换后的字符串std::cout << "Converted string: " << strNum << std::endl;return 0;
}

创建了一个 std::stringstream 对象 ss,并使用 << 操作符将整数 num 转换为字符串。然后,通过调用 ss.str() 方法,获取了转换后的字符串并输出。
在 C++ 的标准库中,std::stringstream 类包含一个名为 str() 的成员函数,用于获取 std::stringstream 对象中当前存储的字符串值。这个函数返回一个 std::string 对象,其中包含了 std::stringstream 中的内容。
当你向 std::stringstream 对象写入数据(使用 << 操作符)或从中读取数据时,这些数据会被存储在内部缓冲区中。通过调用 str() 函数,你可以获取整个缓冲区中的内容,并以字符串形式返回。这样你就可以方便地将 std::stringstream 中的数据提取出来,做进一步的处理或输出。

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

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

相关文章

YoloV8改进策略:Block改进|焦点调制网络

摘要 FocalNets是一个新型的神经网络架构&#xff0c;它的核心特点是用焦点调制模块完全取代了自注意力&#xff08;SA&#xff09;机制&#xff0c;用于在视觉任务中建模令牌&#xff08;token&#xff09;之间的交互。这种架构的设计旨在提高模型的可解释性&#xff0c;并在…

已解决OperationTimeoutException:KeeperErrorCode=OperationTimeout异常的正确解决方法,亲测有效!!!

已解决OperationTimeoutException:KeeperErrorCodeOperationTimeout异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 总结 博主v&#xff1a;XiaoMing_Java 在使用分布式协调服务Apache ZooKeepe…

DataX脚本告别手动编写,用大模型或Java代码自动生成

在离线数仓开发中,DataX支持多种数据源,性能好抽取速度快。美中不足的是,对需要抽取的每一张表都需要写配置文件,这样很繁琐和耗时。可以用大模型提示词来节省这方面的工作量。ChatGPT等大模型并不能很智能提供一个完全正确的,需要提供一个模板让它参考。 方法1:用大模型…

Midjourney订阅攻略/Midjourney的基本参数和命令

AI绘画软件Midjourney使用原理 Midjourney是一个由Midjourney研究实验室开发的先进的人工智能程序&#xff0c;它可以根据用户的文本输入生成精美的图像。Midjourney的主要原理是通过收集大量已有的作品数据&#xff0c;对这些数据进行算法解析&#xff0c;它就可以通过关键词生…

HandyControl PropertyGrid及自定义编辑器

前提条件 项目引入对应HandyControl对应版本包。 使用案例 UI部分 <Window xmlns:hc"https://handyorg.github.io/handycontrol"><hc:TabControl><hc:TabItem Header"默认样式"><hc:PropertyGrid Width"380" SelectedO…

在ubuntu下安装MQTT 服务

ubuntu系统版本22.4.4LTS amd64 在ubuntu系统下打开终端输入命令 ## 安装MQTT 服务 sudo apt-get install mosquitto mosquitto-clients继续执行后系统就完成了安装并默认已启动服务 ## 查看MQTT运行状态 systemctl status mosquitto## 启动服务 systemctl start mosquitto…

【数据库】数据库语言

1.4 数据库语言 数据库系统提供数据定义语言&#xff08;DDL&#xff09;来定义数据库模式&#xff0c;并提供数据操纵语言&#xff08;DML&#xff09;来表达数据库的查询和更新。 通过一系列特定的DDL语句来说明数据库系统所采用的存储结构和访问方式&#xff0c;这种特定的…

HarmonyOS NEXT应用开发之Web获取相机拍照图片案例

介绍 本示例介绍如何在HTML页面中拉起原生相机进行拍照&#xff0c;并获取返回的图片。 效果预览图 使用说明 点击HTML页面中的选择文件按钮&#xff0c;拉起原生相机进行拍照。完成拍照后&#xff0c;将图片在HTML的img标签中显示。 实现思路 添加Web组件&#xff0c;设置…

VTK----VTK的事件机制

事件的发送和接收对于一个应用或系统来说是一个基本的功能,所以一些通用的库对应地也建立了自己的一套管理事件的机制,例如QT、VTK都有自己的事件管理机制。VTK库中定义了很多的事件,这些事件是如何进行管理的,下面从三个方面来详细的说明。 1 事件的管理 在讲述VTK的事件…

ASP .Net Core 8.0 依赖注入的三种注入模式

&#x1f433;前言 &#x1f340;在.NET中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种设计模式&#xff0c;用于解耦组件之间的依赖关系。 依赖注入的核心思想是将对象的依赖关系&#xff08;即对象所需的其他服务或组件&#…

蓝桥杯物联网竞赛_STM32L071_12_按键中断与串口中断

按键中断&#xff1a; 将按键配置成GPIO_EXTI中断即外部中断 模式有三种上升沿&#xff0c;下降沿&#xff0c;上升沿和下降沿都会中断 external -> 外部的 interrupt -> 打断 trigger -> 触发 detection -> 探测 NVIC中将中断线ENABLE 找接口函数 在接口函数中写…

Apache Dolphinscheduler - 无需重启 Master-Server 停止疯狂刷日志解决方案

记录的是一个 3.0 比较难搞的问题&#xff0c;相信不少使用过 3.0 的用户都遇到过 Master 服务中存在一些工作流或者任务流一直不停的死循环的问题&#xff0c;导致疯狂刷日志。不过本人到现在也没找到最关键的触发原因&#xff0c;只是看到一些连锁反应带来的结果…… 影响因素…

统计-R(相关系数)与R^2(决定系数)

1.相关系数&#xff08;R&#xff09; 定义&#xff1a;考察两个事物&#xff08;在数据里我们称之为变量&#xff09;之间的相关程度。 假设有两个变量X&#xff0c;Y&#xff0c;那么两个变量间的皮尔逊相关系数可通过以下公式计算&#xff1a; 公式一&#xff1a; 其中…

CCF-CSP认证考试 202305-1 重复局面 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202305-1 重复局面 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任…

缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题

一、缓存雪崩 简单理解&#xff1a;由于原有缓存失效&#xff0c;新缓存未到期间 (例如&#xff1a;设置缓存时采用了相同的过期时间&#xff0c;在同一时刻出现大面积的缓存过期)&#xff0c;所有原本应该访问缓存的请求都去查询数据库了&#xff0c;而对数据库CPU和内存造成…

File文件对象

在计算机系统中&#xff0c;文件是非常重要的存储方式。Files&#xff08;java.nio.file.Files&#xff09;提供了多种方法来处理文件系统中的文件。比直接使用File文件要方便。 Files工具类:读取指定文件中的所有文本 package study1;import java.io.IOException; import ja…

trpc-go 博客系统

trpc-go 博客系统 使用go语言构建的全栈项目&#xff0c;充分利用了go的简洁性、高性能和并发处理能力。 系统采用了trpc-go框架和北极星进行分布式开发&#xff0c;展示了如何基于腾讯开源技术栈构建微服务架构&#xff0c;实现高效的服务通信和管理。 https://github.com/…

项目管理系统私有化部署解决方案!找企智汇软件!

企智汇项目管理软系统是一款支持私有化部署的项目管理系统&#xff0c;适合大型、中型、小型企业的不同需求。企智汇软件是一个专业的项目全周期管理平台&#xff0c;拥有10年的项目管理经验&#xff0c;以项目为中心&#xff0c;通过计划控制进度&#xff0c;预算控制成本&…

HTML5语义化元素

在HTML5之前&#xff0c;网站的分布层级有哪些呢&#xff1f; nav&#xff0c;header&#xff0c;main&#xff0c;footer 这样做有一个弊端 我们往往过多的使用div&#xff0c;通过ID或class来区分元素 对于浏览器来说这些元素不够语义化 对于我来说搜索引擎来说&#xff0c;不…

云原生部署手册01:构建k8s集群并配置持久化存储

写在前面&#xff1a;k8s弃用docker的影响其实没那么大 k8s通过dockershim对docker的支持从1.20版本后就已经移除&#xff0c;仅支持符合Container Runtime Interface(CRI)的容器运行环境&#xff0c;比如containerd。containerd本身就是docker底层的容器运行环境&#xff0c;…