【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>


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();
}

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:


}
;


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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值