【CCFCSP】201604-3 路径解析
来源:互联网 发布:tempo软件 编辑:程序博客网 时间:2024/05/19 01:30
试题编号: 201604-3
试题名称: 路径解析
时间限制: 1.0s
内存限制: 256.0MB
//参考了别人的博客
本题主要考察对字符串的修改操作。可以用string保存路径信息,再使用string的类函数进行操作。
首先读入当前目录,要注意在之后的P行路径中的相对路径表示的是相对初始当前目录的路径,而不是上一次的结果目录。如果读入的是相对路径,可以直接把初始目录和相对路径拼接后的路径当做需要正规化的路径。
然后对路径修改。字符串中子串或字符的删除可以直接用erase函数实现。首先删除字符串中重复的“/”。然后考虑”//”形式,这个符号不会对之前和之后的路径产生影响,所以直接删除。再考虑”/*/”形式,代表回到上一目录,所以处理时删除这一段以及上一段的目录,(如果在它之前是根目录,只需删除这一段)。如果最后的目录不是根目录,且结尾带有”/”,则需要进行删除。
#include <iostream>#include <string>using namespace std;int main() { int P; string cur,s;//cur保存当前目录,s保存之后每个需要正规化的路径 cin >> P >> cur; cin.ignore();//防止读入换行符 for (int i = 0; i < P; i++) { string s; getline(cin, s); int p;//用作指针 if (s[0] != '/') { //相对路径的处理 s = cur + "/" + s; } if (s.size() == 0) { //注意考虑输入为空行的情况 s = cur; } //删除多余的"/" while ((p = s.find("//")) != -1) { int count = 2; while (s[p + count] == '/') { count++; } s.erase(p, count - 1); } //删除"/*/" while ((p = s.find("/./")) != -1) { s.erase(p + 1, 2); } //处理"/**/" while ((p = s.find("/../")) != -1) { if (p == 0) { s.erase(p + 1, 3); } else { //使用rfind向前查找 int p1 = s.rfind("/", p - 1); s.erase(p1, p - p1 + 3); } } //删除末尾的"/" if(s.length() > 1 && s[s.length()-1] == '/') s.erase(s.length() - 1); cout << s << endl; } return 0;}
0 0
- 【CCFCSP】201604-3 路径解析
- 【CCFCSP】201503-3 节日
- 【CCFCSP】201512-3 画图
- CCFCSP 201612-3权限查询
- 【CCFCSP】201403-3 命令行选项
- 【CCFCSP】201409-3 字符串匹配
- 【CCFCSP】201412-3 集合竞价
- 【CCFCSP】201312-3 最大的矩形
- 【CCFCSP】201509-3 模版生成系统
- CCF 201604-3 路径解析
- CCF-201604-3-路径解析
- CCF 201604 -3 路径解析
- 201604-3 路径解析 80
- ccf 201604-3路径解析
- CCF 201604-3 路径解析
- CCF 201604-3路径解析
- CCF-201604-3 路径解析(模拟)
- CCF认证 201604-3 路径解析
- Java多线程-线程的同步与锁
- opencv笔记(1):平滑处理
- db2日志分析笔记
- git push 报 The requested URL returned error: 403 错误
- 配置Tomcat成为系统服务
- 【CCFCSP】201604-3 路径解析
- 入职以来的技术积累
- 离线安装Android Sdk和Build tools
- C语言--预处理标识符
- 初学C#--6
- 使用vue.js路由后失效
- TinyHTTPd//旧文迁移
- 利用python Pandas进行数据预处理
- 操作系统常见面试问题