1 条题解

  • 0
    @ 2025-8-24 22:42:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar liupan2010
    AFO,再见。

    搬运于2025-08-24 22:42:52,当前版本为作者最后更新于2023-03-30 13:21:16,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    前言:

    我是蒟蒻,看不懂 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;//就输出文件名 
    

    结语:

    完整代码就不再放出了,可以看下通过记录

    • 1

    信息

    ID
    6320
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者