P8824 [传智杯 #3 初赛] 终端 题解
liupan2010 · · 题解
前言:
我是蒟蒻,看不懂 vector 和用 map 的高端写法,所以只能直接模拟字符串了。
题目传送门
代码片段:
这里是一些定义:
string newfile[1001];//新建的文件
bool iscreate[1001];//记录这个文件是否存在
int i,j,n,isok;
string cmd,filename,anotherfilename;//分别为:输入的指令名,文件名与文件被改之后的名称
touch 指令可以直接遍历,如果找到了同名文件,就不创建,否则就将其文件添加进去。
代码如下:
isok=1;
cin>>filename;
for(j=1;j<=n;j++)
if(newfile[j]==filename)//同名不能创造文件
{
isok=0;
break;
}
if(isok==1)//创建文件
{
iscreate[i]=true;
newfile[i]=filename;
}
rm 指令也能直接遍历,如果找到了这个文件,就将这个文件设为不存在。
代码如下:
cin>>filename;
for(j=1;j<=n;j++)
if(newfile[j]==filename)//如果找到了同名文件
{
iscreate[j]=false;//就将文件设为不存在
break;
}
rename 指令首先判断改后的文件名是否重名,如果没有就遍历文件。如果找到了被改名的文件就对其进行改名操作。
代码如下:
cin>>filename>>anotherfilename;
isok=1;
for(j=1;j<=n;j++)
if(newfile[j]==anotherfilename)//如果改后的名字重名了就进行标记
isok=0;
if(isok!=0)//如果没有重名
{
for(j=1;j<=n;j++)
if(newfile[j]==filename)//如果存在此文件就改名
newfile[j]=anotherfilename;
}
ls 指令较为容易实现,直接枚举存在的文件名即可。
代码如下:
for(j=1;j<=n;j++)
if(iscreate[j]==true)//如果文件存在
cout<<newfile[j]<<endl;//就输出文件名
结语:
完整代码就不再放出了,可以看下通过记录。