
/**//*
上海交通大学cs的一道复试题
原题目如下:
给你一串路径,譬如
ac
ade
bcst
d
你把这些路径中蕴涵的目录结构给画出来,子目录直接列在父目录下面,并比父目录向右
缩一格,就象这样
a
b
c
d
e
b
cst
d
程序通过调试没有问题
只不过员题目有一点要求排序,我这里使用了指针来存储在VECTOR里,使用SORT的时候就出现问题了,
有解决意见的可以在后面评论
作者:Albert
*/

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<sstream>
#include<fstream>

usingnamespacestd;




classDirectory
...{
public:
boolhasSubDirectoy(stringdname)
...{
intn=subdirs.size();
if(n==0)returnfalse;
for(inti=0;i<n;i++)
...{
if(subdirs[i]->DirectoryName==dname)returntrue;
}
returnfalse;
}
Directory*getSubDirectory(stringdname)
...{
intn=subdirs.size();
if(n==0)returnNULL;
for(inti=0;i<n;i++)
...{
if(subdirs[i]->DirectoryName==dname)returnsubdirs[i];
}
returnNULL;
}
Directory*addSubPath(stringdname)
...{
Directory*pDir=newDirectory();
pDir->DirectoryName=dname;
subdirs.push_back(pDir);
//sort(subdirs.begin(),subdirs.end(),comp);
//POINTERVECTORNOTEASILYSORTED
returnpDir;
}
intremoveAllPaths()
...{
intn=subdirs.size();
if(n!=0)
...{
for(inti=0;i<n;i++)subdirs[i]->removeAllPaths();
}
deletethis;
return1;
}
~Directory()
...{
removeAllPaths();
}
voidOutPut()
...{
staticintlevel=0;
cout<<DirectoryName<<endl;
intn=subdirs.size();
if(n!=0)
...{
intthislevel=level++;
for(inti=0;i<n;i++)
...{
for(intj=0;j<level;j++)cout<<" ";
subdirs[i]->OutPut();
}
level=thislevel;
}

return;
}


stringDirectoryName;
vector<Directory*>subdirs;
protected:

private:

};

voidParseString(Directory*pDir,stringdes)
...{
intn=des.size();
intfrom=0;
intto=0;
stringsubstr;
stringstreamss(des);
while(getline(ss,substr,'\'))
...{
if(!(pDir->hasSubDirectoy(substr)))
...{
pDir=pDir->addSubPath(substr);
}
else
...{
pDir=pDir->getSubDirectory(substr);
}
}


return;
}



intmain()
...{
ifstreaminfile("infile.txt");
stringstr;
Directoryroot;
while(getline(infile,str))
...{
ParseString(&root,str);
}
root.OutPut();
infile.close();
system("pause");
return0;
}
4168

被折叠的 条评论
为什么被折叠?



