开始做这题时不知从何下手。后来参考了网上别人的解题思路,才渐渐有了自己的思路。整个文件结构是递归构成的,要注意file和dir是在同一层,dir和dir是递归构成的。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int End=0;
struct Node{
vector<string> file;
vector<Node> dir;
string name;
};
void fileInput(Node &node){
string tmp;
while(1){
cin>>tmp;
if(tmp[0]=='#') End=1;
else if(tmp[0]=='f'){
node.file.push_back(tmp);
}
else if(tmp[0]=='d'){
Node n;
n.name=tmp;
fileInput(n);
node.dir.push_back(n);
}
else break;
}
sort(node.file.begin(),node.file.end());
return;
}
void fileOutput(Node &node,int n){
int i,j;
for(i=0;i<n;i++)
cout<<"| ";
cout<<node.name<<endl;
for(i=0;i<node.dir.size();i++){
fileOutput(node.dir[i], n+1);
}
for(j=0;j<node.file.size();j++){
for(i=0;i<n;i++) cout<<"| ";
cout<<node.file[j]<<endl;
}
return;
}
int main() {
int Case=1;
while(Case){
Node root;
root.name="ROOT";
fileInput(root);
if(End) break;
cout<<"DATA SET "<<Case<<":"<<endl;
fileOutput(root,0);
cout<<endl;
Case++;
}
return 0;
}