本题思路来源于acwing ccfcsp认证课


首先,为了处理路径中的反斜杠符号,我们可以实现一个get函数,把一个路径中每一对反斜杠之间的内容存到vector
举个例子:
路径为:/d1/d2/d3 可以变为:vector
路径为:/d1//d2//d3/ 也可以变为:跟上面一样的path
如何实现这个函数呢?直接遍历即可:
- vector
get(string str) - {
- vector
res; - for(int i=0;i
size();i++) - {
- if(str[i]=='/')continue;
- int j=i+1;
- while(j
size()&&str[j]!='/')j++;//包含遍历结束和遇到下一个'/'两种情况 - res.push_back(str.substr(i,j-i));
- }
- return res;
- }
对于给出的当前目录,我们就可以直接把其转换为vector
紧接着,我们会输入n个样例,需要注意的是,样例有可能为空串(此时答案就会输出当前目录)
如果依然用cin,就会忽略这个空串,所以我们用getline
既然使用了getline,我们就需要在之前的cin后面加一个getchar()吸收回车
接下来,我们看如何处理样例
第一步依然是把输入的string用get函数进行路径拆分编程vector
我们再实现一个函数:void walk(vector
这个函数可以在cur的基础上把后面的path(可能包含"."和"..")添加进来,同时输出最终结果
如果是空串或者是相对路径,我们这样调用walk:
walk(cur,path);
如果是空串的话,path就是空,就会输出cur的路径形式
否则,就是输出把path加到cur之后的cur的路径形式
如果是绝对路径,我们这样调用walk:
walk(ab,path);
其中ab是空的vector
最后我们看,如何实现walk函数
利用cpp的foreach写法,直接遍历path中每一个字符串:
如果是"."直接continue
如果是"..",如果cur是空,则continue(因为根目录的上一级还是根目录),否则就删掉一个cur中的string
如果是其它,直接把这个字符串push_back到cur的后面
最后,如果cur是空,输出"/",return 即可
否则,foreach遍历cur,每次输出一个string之前,别忘加一个'/'哦
- #include
- #include
- #include
- using namespace std;
- int n;
- string str;
- vector
get(string str) - {
- vector
res; - for(int i=0;i
size();i++) - {
- if(str[i]=='/')continue;
- int j=i+1;
- while(j
size()&&str[j]!='/')j++; - res.push_back(str.substr(i,j-i));
- i=j;
- }
- return res;
- }
- void walk(vector
cur,vectorpath) - {
- for(auto p:path)
- {
- if(p==".")continue;
- else if(p=="..")
- {
- if(cur.size())cur.pop_back();
- }
- else
- cur.push_back(p);
- }
- if(cur.empty())
- {
- puts("/");
- return;
- }
- for(auto p:cur)
- cout<<"/"<
- cout<
- }
- int main()
- {
- cin>>n>>str;
- vector
cur=get(str); - vector
ab; - getchar();
- while(n--)
- {
- string examp;
- getline(cin,examp);//因为有可能有空串,所有不用cin
- vector
path=get(examp); - if(examp.size()&&examp[0]=='/')walk(ab,path);
- else walk(cur,path);
- }
- return 0;
- }
-
相关阅读:
2022年全球市场砷化铟镓引脚模块总体规模、主要生产商、主要地区、产品和应用细分研究报告
前端性能优化:网站性能优化
R语言GLM广义线性模型:逻辑回归、泊松回归拟合小鼠临床试验数据(剂量和反应)示例和自测题
rabbitmq下载安装教程
基于PHP的人才招聘网站设计
使用 Vue 3 插件(Plugin)实现 OIDC 登录和修改密码(OIDC 系统以 Keycloak 为例)
Partition架构
C# 调用外部EXE程序,接收exe传递的参数,python打包成exe文件
1.[人脸识别] python采集摄像头视频
angular知识系列:移除library
-
原文地址:https://blog.csdn.net/m0_63222058/article/details/133764032