Saturday 11 April 2009

POJ 1057





#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct dir {
string name;
vector<dir> subdir;
vector<string> files;
bool operator<(dir const& other) const {
return this->name<other.name;
}
};
void input(dir& d, string & str){
switch(str[0]){
case 'f':{
d.files.push_back(str);
cin>>str;
input(d,str);
} break;
case 'd':{
dir subdir;
subdir.name=str;
cin>>str;
input(subdir,str);
d.subdir.push_back(subdir);
} break;
default:
return;
}
}
ostream& spacer(int n){
for(;n;--n) cout<<"| ";
return cout;
}
void output(dir & d,int level){
if(!d.subdir.empty()){
spacer(level+1)<<d.name<<endl;
// sort(d.subdir.begin(),d.subdir.end());
for(vector<dir>::iterator i=d.subdir.begin();i!=d.subdir.end();++i)
output(*i,level+2);
}
sort(d.files.begin(),d.files.end());
for(vector<string>::const_iterator i=d.files.begin();i!=d.files.end();++i)
spacer(level)<<*i<<endl;
}
int main() {
int N=0;
for(string str;cin>>str;){
if(str[0]=='#')break;
else if(str[0]=='*')continue;
dir d;
input(d,str);
cout<<"DATA SET "<<++N<<":"<<endl;
output(d,0);
cout<<endl;
}
return 0;
}

No comments:

Post a Comment