试题编号: 201604-3
试题名称: 路径解析
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
在操作系统中,数据通常以文件的形式存储在文件系统中。文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。文件有内容,用于存储数据。目录是容器,可包含文件或其他目录。同一个目录下的所有文件和目录的名字各不相同,不同目录下可以有名字相同的文件或目录。
  为了指定文件系统中的某个文件,需要用路径来定位。在类 Unix 系统(Linux、Max OS X、FreeBSD等)中,路径由若干部分构成,每个部分是一个目录或者文件的名字,相邻两个部分之间用 / 符号分隔。
  有一个特殊的目录被称为根目录,是整个文件系统形成的这棵树的根节点,用一个单独的 / 符号表示。在操作系统中,有当前目录的概念,表示用户目前正在工作的目录。根据出发点可以把路径分为两类:
        绝对路径:以 / 符号开头,表示从根目录开始构建的路径。   
        相对路径:不以 / 符号开头,表示从当前目录开始构建的路径。

  例如,有一个文件系统的结构如下图所示。在这个文件系统中,有根目录 / 和其他普通目录 d1、d2、d3、d4,以及文件 f1、f2、f3、f1、f4。其中,两个 f1 是同名文件,但在不同的目录下。

  对于 d4 目录下的 f1 文件,可以用绝对路径 /d2/d4/f1 来指定。如果当前目录是 /d2/d3,这个文件也可以用相对路径 ../d4/f1 来指定,这里 .. 表示上一级目录(注意,根目录的上一级目录是它本身)。还有 . 表示本目录,例如 /d1/./f1 指定的就是 /d1/f1。注意,如果有多个连续的 / 出现,其效果等同于一个 /,例如 /d1///f1 指定的也是 /d1/f1。
  本题会给出一些路径,要求对于每个路径,给出正规化以后的形式。一个路径经过正规化操作后,其指定的文件不变,但是会变成一个不包含 . 和 .. 的绝对路径,且不包含连续多个 / 符号。如果一个路径以 / 结尾,那么它代表的一定是一个目录,正规化操作要去掉结尾的 /。若这个路径代表根目录,则正规化操作的结果是 /。若路径为空字符串,则正规化操作的结果是当前目录。

输入格式
第一行包含一个整数 P,表示需要进行正规化操作的路径个数。
  第二行包含一个字符串,表示当前目录。
  以下 P 行,每行包含一个字符串,表示需要进行正规化操作的路径。
输出格式
共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。
样例输入
7
/d2/d3
/d2/d4/f1
../d4/f1
/d1/./f1
/d1///f1
/d1/
///
/d1/../../d2
样例输出
/d2/d4/f1
/d2/d4/f1
/d1/f1
/d1/f1
/d1
/
/d2
评测用例规模与约定
1 ≤ P ≤ 10。
  文件和目录的名字只包含大小写字母、数字和小数点 .、减号 - 以及下划线 _。
  不会有文件或目录的名字是 . 或 .. ,它们具有题目描述中给出的特殊含义。
  输入的所有路径每个长度不超过 1000 个字符。
  输入的当前目录保证是一个经过正规化操作后的路径。
  对于前 30% 的测试用例,需要正规化的路径的组成部分不包含 . 和 .. 。
  对于前 60% 的测试用例,需要正规化的路径都是绝对路径。


问题链接:CCF201604试题。

问题描述:(参见上文)。

问题分析:这是一个输入字符串处理的问题,可以有各种各样的处理方法。

1.直接用C语言及其库函数来处理。这是最基本的最高效的(时间上)的方法,逻辑相对会复杂一些。

2.用C++的string类有关的方法(函数)来处理。这种方法编程效率比较高。

3.采用混合方法来处理。既使用C语言的库函数,也使用C++的类库。

这个问题有一个陷阱,就是输入的字符串可能是空串。

程序说明:本程序用第3中方法来实现。因为C++的cin输入字符串时,无法输入空串,而C的库函数中已经不建议使用函数gets(),所以自己编写一个读入一行的函数mygetline(),该函数可以输入空行。用“/”来分割字符串,切割字符串的函数使用C语言的库函数strtok(),将分割好的字符串存储在字符串向量vector<string>是一个有效的做法,程序逻辑上比较简洁。

提交后得100分的C++语言程序如下:

/* CCF201604-3 路径解析 */#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <cstdio>using namespace std;const int N = 1000;char currentpath[N+1];
char v[N*2+1], t[N+1];void spilt(vector<string>& v, char *s)
{char *sp;sp = strtok(s, "/");while(sp) {v.push_back(sp);sp = strtok(NULL, "/");}
}void process(vector<string>& sv)
{int delcount = 0;for(int i=0; i<(int)sv.size(); i++) {if(sv[i] == "..") {delcount++;sv[i] = "";for(int j=i-1; j>=0; j--)if(sv[j] != "") {delcount++;sv[j] = "";break;}} else if(sv[i] == ".") {delcount++;sv[i] = "";}}if((int)sv.size() - delcount <= 0)cout << "/" << endl;else {for(int i=0; i<(int)sv.size(); i++) {if(sv[i] != "" )cout << "/" << sv[i];}cout << endl;}
}void mygetline(char *pc)
{char c;while((c=getchar()) != '\n' && c !=EOF)*pc++ = c;*pc = '\0';
}int main()
{int p;// 输入数据:整数p和当前目录cin >> p >> currentpath;getchar();// 输入p个路径进行正规化处理for(int i=1; i<=p; i++) {vector<string> sv;// 输入路径mygetline(t);// 非根路径处理if(t[0] != '/') {strcpy(v, currentpath);strcat(v, "/");strcat(v, t);} elsestrcpy(v, t);// 切分路径spilt(sv, v);// 对输入路径进行正规化处理,并且输出结果process(sv);}return 0;
}

转载于:https://www.cnblogs.com/tigerisland/p/7564158.html

CCF201604-3 路径解析(100分)相关推荐

  1. CCF201604-3 路径解析(解法二)(100分)

    试题编号: 201604-3 试题名称: 路径解析 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中.文件系统一般采用层次化的 ...

  2. CCF201604-3 路径解析(解法二)(100分)(废除!!!)

    试题编号: 201604-3 试题名称: 路径解析 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中.文件系统一般采用层次化的 ...

  3. CCF201604-3 路径解析(解法三)(90分)(废除!!!)

    试题编号: 201604-3 试题名称: 路径解析 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中.文件系统一般采用层次化的 ...

  4. CCF201803-3 URL映射(100分)【文本处理+暴力】

    试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 ...

  5. CCF-CSP认证历年真题解(100分)

    转载: 链接出自:https://blog.csdn.net/tigerisland45/article/details/54755895 CCF-CSP认证历年真题解–python语言 CCF-CS ...

  6. 干货!我的计算机网络怎么考了 100 分的?

    作者 | 轩辕之风O 来源 | 编程技术宇宙(ID:xuanyuancoding) 有读者问我:轩辕,你是怎么学计算机网络的?鸽了好久,今天得空聊聊这个话题. 轩辕是通信工程专业,计算机网络通信自然是 ...

  7. CCF202012-4 食材运输(100分题解链接)

    试题编号: 202012-4 试题名称: 食材运输 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目背景 在T市有很多个酒店,这些酒店对于不同种类的食材有不同的需求情况,莱莱公司负责 ...

  8. CCF201803-5 二次求和(100分题解链接)

    试题编号: 201803-5 试题名称: 二次求和 时间限制: 10.0s 内存限制: 512.0MB 问题描述: 问题描述 给一棵 n 个节点的树,用 1 到 n 的整数表示.每个节点上有一个整数权 ...

  9. CCF201703-4 地铁修建(100分)【Kruskal算法+二分+最短路】

    试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号 ...

最新文章

  1. 【转】WordPress源码解读(1)
  2. bitcoin cash的地址格式 cash addr 简介
  3. python线程卡死问题解决_python while True造成未响应或卡顿的解决方法
  4. Letters Removing CodeForces - 899F (线段树维护序列)
  5. ORACLE中科学计数法显示问题的解决
  6. 2015总结及2016计划
  7. 关于Cocos2d-x随机数的生成
  8. Cocos2D学习笔记(1)- 常用的类
  9. 吴恩达机器学习(一)单变量线性回归(假设函数、代价函数、梯度下降)
  10. maven 项目搭建
  11. cordova 美洽_phonegap-cordova-美洽客服插件-Android
  12. mysql视图出问题如何解决_MySQL视图
  13. html中竖线怎么写,网页中竖线的几种做法
  14. JAVA怎么给扇形加边框_PS怎么制作扇形边框 扇面边框教程
  15. 微信消息推送神器【一封传话】介绍,让消息推送更简单
  16. JAVA的发展方向以及前辈的一些看法
  17. python股票全套系统_用python来炒股三 炒股交易系统(法则)
  18. 【宋红康 MySQL数据库 】【高级篇】【07】MySQL的存储引擎
  19. Oracle varchar2 4000
  20. python爬取百度云资源分享吧_python爬取百度云盘资源

热门文章

  1. 厉害了!一个Nvidia PC可运行四个Vives
  2. 搞技术的OpenAI现在要做投资了,成立1亿美元创业基金,网友:融资花不完了?...
  3. 滴滴AI负责人叶杰平:你的每一次出行,都已有AI落地的助力 | MEET 2020
  4. 百度增长复苏,市值一夜涨160亿;李彦宏:技术价值再度闪耀,宁可创新冒险也不平庸保守...
  5. Pandas可视化综合指南:手把手从零教你绘制数据图表
  6. java 打包的两种方式
  7. mac git命令按tab键自动补全
  8. PostgreSQL在何处处理 sql查询之十二
  9. Maven私服安装及配置——(十二)
  10. JAVA 连接MYSQL数据库操作