计算机复试之KY100 路径打印(c++)
描述给你一串路径,譬如:a\b\ca\d\eb\cstd你把这些路径中蕴含的目录结构给画出来,子目录直接列在父目录下面,并比父目录的首字符向右缩两个空格,就像这样:abcdebcstd注:同一级的需要按字母顺序排列,不能乱。输入描述:每个测试案例第一行为一个正整数n(n<=10)表示有n个路径,当n为0时,测试结束,接下来有n行,每行有一个字串表示一个路径,长度小于50。输出描述:输出目录结
·
描述
给你一串路径,譬如:
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
这道题是在无力吐槽了,没找出错误在哪。一直提示格式错误。
已经解决的格式问题:
- 顺序(字母顺序)输出
- 父目录与子目录相对位置输出
#include<iostream>
#include<string.h>
#include<queue>
#include<vector>
#include<map>
using namespace std;
int main()
{
int line;
string str = "";
while (cin >> line && line) {
//顺序排列
priority_queue<string,vector<string>,greater<string> > que;
vector<string> vec{};
for (int i = 0; i < line;++i) {
cin >> str;
que.push(str);
}
//字符串读取与分离
while (!que.empty()) {
line--;
str = que.top();
que.pop();
int pos = 0, len = str.size();
int tp = 0, out_pos = 0,flag = 1;
while (tp != -1) {
tp = str.find('\\', pos);
string temp_str = "";
if (tp != str.npos)
temp_str = str.substr(pos, tp - pos);
else
temp_str = str.substr(pos, str.size() - pos);
if (temp_str == "")
break;
pos = tp + 1;
//已经存在该键值时
if (flag == 1 && out_pos < vec.size() && vec[out_pos] == temp_str)
out_pos++;
//不存在该键值时
else {
flag = 0;
for (int i = 0; i <= out_pos - 1; ++i)
cout << " ";
cout << temp_str << endl;
if (vec.size() == 0 || vec.size() <= out_pos)
vec.push_back(temp_str);
else
vec[out_pos] = temp_str;
out_pos++;
}
}
}
}
}
牛客结果:
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)