[Jobdu] 题目1090:路径打印
- 题目描述:
-
给你一串路径,譬如:
a\b\c
a\d\e
b\cst
d\
你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右缩一格,就像这样:
a
b
c
d
e
b
cst
d
同一级的需要按字母顺序排列,不能乱。
- 输入:
-
每个测试案例第一行为一个正整数n(n<=10)表示有n个路径,当n为0时,测试结束,接下来有n行,每行有一个字串表示一个路径,长度小于50。
- 输出:
-
输出目录结构,每一个测试样例的输出紧跟一个空行。
- 样例输入:
-
4 a\b\c a\d\e b\cst d\ 0
- 样例输出:
-
a b c d e b cst d
先帖代码如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
#include <algorithm>
using
namespace
std;
bool
comp(string a,string b){
int
l = a.length()>b.length()?b.length():a.length();
for
(
int
i=0;i<l;i++){
if
(a[i]!=b[i]){
if
(a[i]!=
'\\'
&&b[i]!=
'\\'
){
return
a[i]<b[i];
}
else
if
(a[i]==
'\\'
){
return
true
;
}
else
if
(b[i]==
'\\'
){
return
false
;
}
}
}
return
a.length()<b.length();
}
int
main(
int
argc,
char
* argv[]){
//freopen("input.txt","r",stdin);
int
n;
string str;
vector<string> v;
while
(cin>>n&&n){
v.resize(0);
while
(n--){
cin>>str;
//cout<<str<<endl;
if
(str[str.length()-1]==
'\\'
){
str.erase(str.length()-1,str.length());
}
if
(find(v.begin(),v.end(),str)==v.end()){
v.push_back(str);
}
while
(str.find(
'\\'
)!=string::npos){
str.erase(str.find_last_of(
'\\'
),str.length());
if
(find(v.begin(),v.end(),str)==v.end()){
v.push_back(str);
}
}
}
sort(v.begin(),v.end(),comp);
for
(
int
i=0;i<v.size();i++){
if
(v[i].find(
'\\'
)==string::npos){
cout<<v[i]<<endl;
}
else
{
for
(
int
j=0;j<v[i].find_last_of(
'\\'
);j++){
cout<<
" "
;
}
cout<<
" "
;
cout<<v[i].substr(v[i].find_last_of(
'\\'
)+1,v[i].length());
cout<<endl;
}
}
cout<<endl;
}
return
0;
}
这道题目卡了很久。一直PE,原来题目中的输出要求指的是 子目录比父目录向右缩一格
指的是 子节点的缩进长度 =父亲节点的缩进 +父亲节点本身字符串长度+1.懒得写注释了,程序的思想是把所有的文件提取出来,存在一个vector里,对其按要求排序输出即可。
比如说样例中的:
a\b\c
a\d\e
b\cst
d\
首先从这些目录中提取出所有的文件(包含路径),得到:
a、a\b、a\b\c、a\d、a\d\e、b、b\cst、d,
然后要做的就是排序了,过程很简单,在自定义的comp函数中实现。
在这儿排序后的结果应该跟上面一样。
最后输出,输出的时候把文件路径的部分隐掉,至于空格的数量看题目的要求了。这儿最蛋疼了,一直没搞清楚题意,害我PE了10几次。
这题也可以用字典树吧,感觉还是这个实现起来简单一点。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步