模拟linux tree命令打印文件树
来源:互联网 发布:earpods 知乎 编辑:程序博客网 时间:2024/06/06 06:43
问题描述:
在给定Linux文件信息的情况下,讲文件以树的形式展现出来。类似Linux下的tree命令。输入和输出如下:
输入解释:
第一行为总的文件数目:n
后面输入的每行从0计数,代表紧接着输入文件的id号,输入文件名+“空格” + 该文件父id号,pid=-1代表根节点。
例如:my-app 文件id为0,src文件id为1,pom.xml文件id为2,src和pom.xml的父文件为my-app.
代码如下:
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;struct filenode{ string filename; int id; int pid; filenode(string name, int id_temp, int pid_temp):filename(name),id(id_temp),pid(pid_temp){}};bool sortbyname(const filenode a, const filenode b){ if(a.filename<b.filename) return true; else return false;}bool isFolder(vector<filenode> filenodes, int pid){ for(int i = 0; i < filenodes.size(); i++) { if(filenodes[i].pid == pid) return true; } return false;}void printTree(vector<filenode> filenodes, int depth, int id, int block){ int n = filenodes.size(); int fathernode = id; if(id == -1){ for(int i = 0; i < n; i++){ if(filenodes[i].pid == -1){ fathernode = filenodes[i].id; break; } } } vector<filenode> childnodes = vector<filenode>(); for(int i = 0; i < n; i++){ if(filenodes[i].pid == fathernode) childnodes.push_back(filenodes[i]); } printf("%s\n",filenodes[fathernode].filename.c_str());//打印文件名 if(childnodes.size() != 0){ sort(childnodes.begin(), childnodes.end(), sortbyname); for(int j = 0; j < childnodes.size(); j++){ int k = block; while(k--) printf(" "); int k2 = depth - block; while(k2--) printf("| "); if(isFolder(filenodes,childnodes[j].id)){ if(j == childnodes.size() - 1){ printf("|-- "); printTree(filenodes, depth + 1, childnodes[j].id, block + 1); }else{ printf("|-- "); printTree(filenodes, depth + 1, childnodes[j].id, block); } }else{ if(j == childnodes.size() - 1){ printf("|-- %s\n",childnodes[j].filename.c_str()); }else{ printf("|-- %s\n",childnodes[j].filename.c_str()); } } } }}int main(){ int n = 0; cin>>n; vector<filenode> filenodes = vector<filenode>(); for(int i = 0; i < n; i++){ char k[1000]; cin>>k; int temp; cin>>temp; filenodes.push_back(filenode(string(k), i, temp)); } cout<<"print the tree of files"<<endl; printTree(filenodes, 0, -1, 0); system("pause"); return 1;}
阅读全文
1 0
- 模拟linux tree命令打印文件树
- linux 树型显示文件 tree ls tree 命令
- tree命令的模拟
- statfs获得磁盘使用情况 模拟linux命令 打印比较
- linux命令--tree显示文件目录结构
- Linux命令之strings:打印文件中的可打印字符串
- Linux命令之strings:打印文件中的可打印字符串
- Linux命令之strings - 打印文件中的可打印字符串
- 模拟linux的 cat命令 读取文件
- 用java模拟dos树结构(tree命令)第二弹
- DOS命令打印文件列表树
- 关于linux打印某个文件内容的命令
- Linux打印命令
- linux系统调用之文件:递归实现tree命令
- linux tree命令以树形结构显示文件目录
- linux tree命令以树形结构显示文件目录结构
- linux--tree命令以树形结构显示文件目录结构
- Linux 命令(文件和目录管理 - tree)
- Oracle 普通子查询和关联子查询
- 集群工具ansible简单使用
- 使用AsyncTask的常见问题及解决方式
- HDU-1754-I Hate It-(线段树)
- java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
- 模拟linux tree命令打印文件树
- iOS学习笔记-103.多线程02——线程状态、同步、通信
- JVM类加载机制
- javascript里面的数据类型有哪些
- 基于jquery的树形列表TreeGrid
- PyQt初级教程
- 约瑟夫环的java实现
- 从veth看虚拟网络设备的qdisc
- Checkbox和RadioRadioButton及其实例