【C&C++】上海交大以前的一道复试题

/**/ /*
上海交通大学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 >


using namespace std;





class Directory
... {
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();
}

delete
this;

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:


}
;


void ParseString(Directory * pDir, string des)
... {
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;
}





int main()
... {

ifstreaminfile(
"infile.txt");
stringstr;
Directoryroot;
while(getline(infile,str))
...{
ParseString(
&root,str);
}


root.OutPut();

infile.close();
system(
"pause");
return0;
}

你可能感兴趣的:(C++,c,C#,J#,交通)