CSP考试 2016年04月第3题 路径解析 C++实现

2023-05-16

//. 表示本目录,例如 /d1/./f1 指定的就是 /d1/f1 
//如果有多个连续的 / 出现,其效果等同于一个 /
//绝对路径:以 / 符号开头,表示从根目录开始构建的路径。
//相对路径:不以 / 符号开头,表示从当前目录开始构建的路径。
//.. 表示上一级目录。 . 表示本目录
#include <iostream> 
#include <string>
//#include <cstring>
//假设当前目录是标准的 
//考虑所有字符串 
//70分 修改版 
//若路径为空字符串,则正规化操作的结果是当前目录。
//80分 修改版 
//.. 表示上一级目录
// . 表示本目录
//对于前 60% 的测试用例,需要正规化的路径都是绝对路径。
//输入../..
//输出/d2/..
//修改版 使用栈 + substr repace 
//90分 运行错误 
// 1
// /d2/d3
// /../...
// /..  
using namespace std;
int main()
{
	int NUM;
	cin>>NUM;
	string a[NUM];
	string b;//输入的当前目录保证是一个经过正规化操作后的路径。
	cin>>b;
	string dj;
	getline(cin,dj);
	int i;
	for(i=0;i<NUM;i++)
	{
		//cin>>a[i];
		getline(cin,a[i]);
	}
	//string c[NUM];
	int m;
	for(m=0;m<NUM;m++)
	{
		//实验第1个字符串 
		//允许出错
		//绝对路径:以 / 符号开头,表示从根目录开始构建的路径。
		//相对路径:不以 / 符号开头,表示从当前目录开始构建的路径。
		//当前目录能为空吗
		if(b=="") 
		{
			b="/";
		}
		if(a[m]=="")
		{
			a[m]=b;//若路径为空字符串,则正规化操作的结果是当前目录
			//continue;
		}
		if(a[m][0]!='/') 
		{
			a[m]=b+'/'+a[m];
		}
		//cout<<a[m]<<endl;
		int j=0;
		for(i=0;i<a[m].size();i++)//去掉多余的'/' 
		{
			if(a[m][i]!='/')
			{
				a[m][j]=a[m][i];
				j++;
			}else if((a[m][i]=='/')&&(a[m][i+1]!='/'))
			{
				a[m][j]=a[m][i];
				j++;
			}
		}
		for(i=j;i<a[m].size();i++)
		{
			a[m][i]=0;
		}
		//正规化操作要去掉结尾的 /
		if(a[m][a[m].size()-1]=='/')
		{
			a[m][a[m].size()-1]=0;
		}
    	//cout<<a[m]<<endl;
    	//. 表示本目录
   	 	//将"/./"用"/"替代
   	 	// 1
   	 	// /
   	 	// .
   	 	// /. 解决
		//也许还有问题 
		//当前目录能为空吗 
   		 j=0;
		for(i=0;i<a[m].size();i++)
		{
			if((a[m][i]=='/')&&(a[m][i+1]=='.')&&((a[m][i+2]=='/')||(a[m][i+2]=='\0')))// "/./" "/."
			{
				//a[0][j]=a[0][i];
				//j++;
				i=i+1;
			}else 
			{
				a[m][j]=a[m][i];
				j++;
			} 
		} 
		for(i=j;i<a[m].size();i++)
		{
			a[m][i]=0;
		}
		if(a[m][0]=='\0')
   	 	{
   	 		a[m][0]='/';
		}
		//cout<<a[m]<<endl;
		//处理"/../"  90分 运行错误 
		// 1
		// /d2/d3
		// ../../../d4/../..
		//运行错误 解决 
		// 1
		// /
		// ..
		// /..  解决 
		// .. 表示上一级目录
		// 90分 错误 
		//cout<<a[m]<<endl;
		int zhan[1000];
		for(i=0;i<1000;i++)
		{
			zhan[i]=0;
		}
		//memset(zhan,0,sizeof(zhan));
		int top=-1;
		for(i=0;i<a[m].size();i++)
		{
			//cout<<"top "<<top<<endl;
			if((a[m][i]=='/')&&(a[m][i+1]=='.')&&(a[m][i+2]=='.')&&((a[m][i+3]=='/')))//"/../"
			{
				//cout<<"hi 1"<<endl;
				if(top==-1)
				{
					//cout<<"hello 1"<<endl;
					a[m]=a[m].replace(i,3,"");
					i=i-1;
					continue;
				}
				//出栈 
				int pos;
				pos=zhan[top];
				if(top>-1)
				{
					top--;
				}
				//string str="";
				a[m]=a[m].replace(pos+1,(i-pos+3),"");
				//cout<<a[m]<<endl;
				i=pos-1;
			}else if((a[m][i]=='/')&&(a[m][i+1]=='.')&&(a[m][i+2]=='.')&&(a[m][i+3]=='\0'))//"/.."  
			{
				//cout<<"hi 2"<<endl;
				if(top==-1)
				{
					//cout<<"hello 2"<<endl;
					a[m]="/";
					break;
				}
				//出栈 
				int pos;
				pos=zhan[top];
				if(top>-1)
				{
					top--;
				}	
				//string str="";
				a[m]=a[m].replace(pos+1,(i-pos+2),"");
				//cout<<a[m]<<endl;
				i=pos-1;
			}else 
			{
				if(a[m][i]=='/')
				{
					//入栈
					top++;
					zhan[top]=i; 
				}
			}
			//cout<<a[m]<<endl;
		}
	}
	for(m=0;m<NUM;m++)
	{
		cout<<a[m]<<endl;
	}
	/* 
	cout<<NUM<<endl;
	cout<<b<<endl;
	for(i=0;i<NUM;i++)
	{
		cout<<a[i]<<endl;
	}*/
	return 0;
}
//输入""
//输出/d2/d3 

//输入../..
//输出/

//输入../../../
//输出/



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSP考试 2016年04月第3题 路径解析 C++实现 的相关文章

  • 【ZJM要抵御宇宙射线】CSP模测T2

    题目 题目大意 本题给出平面二维坐标上的若干个点 xff0c 要求选取一个点做圆心 xff0c 此时可以以最短半径包含所有点 xff0c 求出圆心坐标和最短半径平方 xff0c 结果保留两位小数 解题思路 本题乍看只下可能觉得会很复杂 xf
  • 【Week 16】CSP-M4

    TT数鸭子 题目描述 输入输出描述 样例 思路 对每个数字按数位进行遍历 xff0c 求取不重复数字个数即可 代码 span class token macro property span class token directive key
  • 2016 Personal Training #4 Div.2 A B C G H

    xff21 URAL 2091 题意 xff1a 有四个类别 xff11 xff0e xff21 和 xff22 都包含 xff0c xff12 xff0e 只包含 xff21 不包含 xff22 xff0c xff13 xff0e 只包含
  • 2016 Team Training #21 Gym 100952 A D E F J

    A 水题 题意 xff1a 两个人的时间分别是时 xff0c 分 xff0c 秒输入 xff0c 也就是让我们输出谁时间最早呗 思路 xff1a 没有思路直接上 xff0c 看手速了 xff08 我敲代码速度慢 xff09 代码如下 xff
  • CCF CSP 201512-3 画图

    字符串基础题 问题描述 用 ASCII 字符来画图是一件有趣的事情 xff0c 并形成了一门被称为 ASCII Art 的艺术 例如 xff0c 下图是用 ASCII 字符画出来的 CSPRO 字样 lt 本题要求编程实现一个用 ASCII
  • Outlook 2013/2016 显示“正在启动...“ 无法进入Outlook的解决方案

    因上次非正常关闭 xff0c 导致Outlook 2016启动时 xff0c 一直处于启动界面 xff0c 无法进入主界面正常工作 刚开始Outlook 2016启动界面显示的是 34 正在处理 34 查询网上各种方法 xff0c 安全启动
  • 2016.2.27 Px4 flow分析

    Px4 flow 分析 代码地址 https github com PX4 Flow 主要来分析最后一个函数 compute flow 原版代码的光流算法主要是使用 hist 直方图算法 xff0c 这段代码主要可以分成两部分来看 xff0
  • CSP-S 模拟52

    rank10 T1 平均数 二分答案 xff0c 让所有的数减去这个答案 xff0c 求前缀和 xff0c 然后验证子序列平均数比这个答案小的的个数是否等于K 只需要找前缀和的逆序对个数即可 xff08 归并排序 xff09 T2 涂色游戏
  • 【2015-2016,我在路上】

    前言 xff1a 每天 xff0c 每时 xff0c 每分 xff0c 时光的步伐永远不会停止 xff0c 当我提起笔 xff0c 写下的这一瞬间 xff0c 时间又是一年 xff0c 一年的时光 xff0c 在没逝去时 xff0c 感觉很
  • 2016晚安 2017你好

    不知不觉开通CSDN账号已有三年多的时间 xff0c 三年多以前抱着学习坚持的态度想要在CSDN上记录自己学习的点滴 结果三年多过去了 xff0c 2016年也随着过去了 xff0c 回顾2016年主要的三件事情就是 xff1a 1 从大学
  • CSP-S 模拟测试 51 题解

    考试过程 xff1a 惯例先看一遍三道题 xff0c T1 一开始反应要求割点 xff0c 但是这是有向图 xff0c 肯定不能求割点 xff0c 康了一下数据范围 xff0c 有40 是树的 xff0c 还不错 xff0c 决定待会在打
  • flexnet licensing service下载_Abaqus 2016 软件下载地址及安装教程

    目前100000 43 人已关注加入龙跃系统 软件介绍 名称 xff1a Abaqus 2016 64位 大小 xff1a 5GB 语言 xff1a 简体中文 安装环境 xff1a Win7 Win8 Win10 ABAQUS 是一套功能强
  • Outlook 2016 pst/ost邮件数据文件迁移实现

    当使用outlook 2016新建Email账户的时候 xff0c 其数据文件 xff08 ost文件 xff09 总是被保存在C盘默认目录 C Users 用户名 AppData Local Microsoft Outlook 下 xff
  • 【202206-3】角色授权

    AC的快乐无与伦比 本蒟蒻刚看到这道题时 就被超长的题干和复杂的关系唬住了 于是学习了各路大神的解法 终于AC 成功照虎画猫了 现将在此过程中学到的种种知识总结如下 作为本小白菜 不但小白还有菜 的编程笔记 Attention 一 C 中的
  • CSP 202305-1 重复局面

    题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以上 可由任意一方提出和棋 问题描述 国际象棋每一个局面可以用大小为 8 8 的字符数组来表示 其中每一位对应棋盘上的一个格子 六种棋子王 后 车 象 马 兵分别用字母 k q r
  • CCF-CSP 新生必读

    CCF软件能力认证 Certified Software Professional CSP CSP认证考什么 怎么考 1 认证概况 认证名称 计算机软件能力考试认证 简称软件能力认证 认证定义 软件能力包括软件的开发 测试 部署和运行维护能
  • CCF/CSP 201409-3 字符串匹配(满分题解Java版)

    此题虽然放在了第三题 但是如果对Java的API了解的比较好的同学 解这道题一点都不难 比前几题都要简单一些 题目描述 官方题目地址 读题请点击 Java满分题解 import java util Scanner next 与 nextLi
  • CCF-CSP真题《202305-1 重复局面》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看 CCF CSP真题附题解大全 试题编号 202305 1 试题名称 重复局面 时间限制 1 0s 内存限制 512 0MB 问题描述 题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以
  • csp试题1:小明种苹果

    csp试题1 小明种苹果 题目 分析 代码 总结 题目 题目描述 小明在他的果园里种了一些苹果树 为了保证苹果的品质 在种植过程中要进行若干轮疏果操作 也就是提前从树上把不好的苹果去掉 第一轮疏果操作开始前 小明记录了每棵树上苹果的个数 每
  • CSP 202212-1 现值计算

    答题 主要就是 include

随机推荐

  • STM32CubeMX生成STM32L073RZT6 BootLoader程序

    1 环境 xff1a Windows10 xff0c STM32CubeMX6 0 0 xff0c Keil5 25 单片机为STM32LRZT6 196KBytes Flash xff0c 20KBytes RAM 2 功能要求 设计Bo
  • RHEL7 的注册

    安装RHEL7后 xff0c 在没有注册的时候 xff0c YUM软件仓库是不能使用的 xff0c 需要注册后才可以使用 xff0c 但是RHEL是商用版系统 xff0c 需要购买授权 在网上查找后 xff0c 发现RHEL有个开发者订阅
  • linux下查看可执行文件的相关信息

    1 file 可执行文件 可查看可执行文件是ARM架构还是X86架构 2 nm 可执行文件 可查看文件中的符号 xff0c 包括全局变量 xff0c 全局函数等 3 ldd 可执行文件 可查看文件执行所需要的动态库 4 strings 可执
  • linux下查看系统内存使用情况的几个命令

    最近在客户现场运行的arm linux嵌入式设备出现了死机情况 xff0c 由于接触linux嵌入式设备时间不长 xff0c 遇到该问题后觉得束手无措 后领导提示说查看其他没有死机设备的系统资源使用情况 xff0c 下面介绍下我用到的那些命
  • Linux下获取CPUID、硬盘序列号

    在很多系统软件的开发中 xff0c 需要使用一些系统的唯一性信息 所以 xff0c 得到主机的CPUID 硬盘序列号及网卡的MAC地址 xff0c 就成个一件很重要的应用 需要的准备知识有 xff1a 1 GCC的嵌入汇编 xff0c 具体
  • Thinkpad MORFFHL滑鼠接收器配对

    1 接收器插入电脑 2 关闭鼠标 3 同时按住鼠标左键 右键 滚轮打开电源开关 xff0c 3个键按住3秒左右松手 4 同时按下3个按键 xff0c 指示灯橘色闪烁 5 再次同时按下3个按键 xff0c 配对结束 6 关闭鼠标重新打开 移动
  • Vbox6.04 Debian虚拟机安装增强工具

    环境 xff1a VBox6 04 Debian9 6 64位 在创建Vbox虚拟机后安装好Debian系统 开始操作前请确保虚拟机可以上网 1 root用户登录Debian xff1b 2 uname r 查看debian内核版本 3 a
  • Debian系统源码安装usb网卡驱动

    系统为debian 9 6 64位版本 xff0c 安装网卡驱动为asix的 AX88772B芯片 1 安装系统build模块 apt get install linux image uname r linux headers uname
  • Ubuntu根目录下各文件夹的作用

    Ubuntu上常识和常用命令 xff1a 1 Ubuntu文件结构 在ubuntu上硬盘的目录和Windows上不同 xff0c Windows可以根据自己的需求分不同的盘符 xff0c 但ubuntu上只有一个盘 xff0c 从根目录开始
  • linux中的export命令介绍

    export Linux中export命令介绍 xff0c 三种方法设置环境变量 CSDN博客
  • 一位 JavaScript 铁杆粉眼中的 Rust

    以下为译文 xff1a 我使用 Rust 编写了一些小工具 xff0c 而且觉得很有乐趣 我的日常工作需要大量使用 JavaScript xff0c 而 Rust 给我一种非常熟悉的感觉 xff0c 因此我决定尝试一下Rust 但与此同时
  • 树莓派3B+搭配Buster版本系统进行红外遥控开发

    一 配件清单 树莓派 xff1a 3B 43 系统版本 xff1a Buster红外接收器 xff1a VS1838B 红外遥控器 xff1a 未知型号 xff08 标有ar mp3字样 xff09 杜邦线若干 二 线路组合准备 根据网上查
  • Rust生态技术栈

    文章目录 Rust开发生态 开发整理 20230106更新 1 日志记录1 1 simple logger1 2 env logger 2 输入 输出3 String类型的match4 print 输出无效问题5 线程6 Excel读取7
  • Rust GUI方案调研

    GUI库方案 xff1a QT xff1a qt功能强大 xff0c 稳定 xff0c 如果功能比较复杂 xff0c 可以考虑qt绑定 orbtk xff1a rust语言编写的操作系统redox项目的GUI方案 xff0c 完全使用rus
  • windows远程Ubuntu(xrdp+vnc)步骤及问题解决方案(ip设置)

    首先将计算机连入相应的路由器 xff0c 登陆账号即可上网 xff0c 下面部分引用了blog xff1a http zhouxiaowei1120 github io Blogs 20160407 html 其中第 xff08 5 xff
  • Ubuntu/debian 中更改桌面的路径/位置

    虚拟机debian系统中安装好vmware tool 后 xff0c 系统的桌面变为了主目录 修改如下 xff1a vi config user dir dirs 把其中的 XDG DESKTOP DIR 61 HOME 改成如下 XDG
  • 八数码问题的可解性

    对于给定八数码棋局的初始状态 xff0c 我们的目标是通过交换空格与其相邻棋子使棋盘达到目标状态 其中 xff0c 游戏规则是只能交换空格与其上下左右四个方向的相邻棋子 假设棋局目标状态为如下形式 xff1a xff08 A B C D E
  • Powershell远程错误整理

    xfeff xfeff 错误现象 权限不够 xff1a 执行Set WSManQuickConfig Enable PSRemoting会报错 xff0c 用Get Item WSMan 检查时会发现其子项无法访问 xff0c 用reged
  • vs2013编译错误error: MSB8020,一招解决这个错误

    错误提示 xff1a error MSB8020 The build tools for v140 Platform Toolset 61 39 v140 39 cannot be found To build using the v140
  • CSP考试 2016年04月第3题 路径解析 C++实现

    表示本目录 xff0c 例如 d1 f1 指定的就是 d1 f1 如果有多个连续的 出现 xff0c 其效果等同于一个 绝对路径 xff1a 以 符号开头 xff0c 表示从根目录开始构建的路径 相对路径 xff1a 不以 符号开头 xff