当前位置: 首页 > article >正文

传智杯 3-初赛:终端

题目描述:

        有一天您厌烦了电脑上又丑又没用的终端,打算自己实现一个 Terminal。具体来说,它需要支持如下命令:

1. `touch filename`:如果名为 `filename` 的文件不存在,就创建一个这样的文件,如果已经存在同名文件的话则不进行任何操作。

2. `rm name`:删除名为 `name` 的文件。如果不存在这样的文件,就不进行任何操作。

3. `ls`:按创建时间为顺序,显示当前已经存在的未被删除的所有文件。

4. `rename xxx yyy`:将名为`xxx`的文件名字改为 `yyy` 。如果不存在这样的文件,或者已经存在文件名为 `yyy` 的文件,则不做任何操作。

        这里所有涉及的文件名都仅由大写或者小写的英文字母构成,且文件名区分大小写。

输入格式:

        第一行一个整数 n ,表示总共要执行的操作数。接下来 n 行,每行一个字符串,表示一条命令。

输出格式:

        对于每个 `ls` 命令,请输出若干行,每行一个字符串,表示一个文件,如果当前并没有任何文件,则什么都不输出。请注意本题时限为 3s,输入输出规模较大,请注意常数因素对耗时的影响,我们不会给使用 Java 和 Python 的选手增加额外的运行时间。

样例输入:

6
touch yyh
touch yyhtql
rename yyh yyhnb
touch qwq
rename qwq qaq
ls

样例输出:

yyhnb
yyhtql
qaq

解题思路:

        设置一个用于查找名字为name的文件的函数,当文件存在时返回文件所在的位置,不存在的时候返回-1。利用cin函数进行输入,其不能收到空格信息,可以利用空格进行分析指令时什么类型,根据每个类型的指令,做出对应的操作。

代码:

#include<iostream>
#include<string>
using namespace std;

int number = 0;   //记录文件的个数

//文件结构体
struct file
{
	string name;   //名字
	int sign;   //存在为1,不存在为0
};

//查找文件name
int is_essence(string name,file a[])
{
	for (int i = 0;i < number;i++)
	{
		if (a[i].name == name && a[i].sign == 1)   //找到
		{
			return i;
		}
	}
	return -1;   //不存在文件name
}


signed main()
{
	file arr[1000];   //创建文件数组

	//输入
	int n;   //指令个数
	cin >> n;
	for (int i = 0;i < n;i++)
	{
		string zhiling;
		cin >> zhiling;
		//情况1
		if (zhiling == "touch")   //创建文件
		{
			string name;
			cin >> name;
			if (is_essence(name, arr) == -1)    //不存在文件名为name的文件
			{
				arr[number].name = name;
				arr[number].sign = 1;
				number++;
			}
		}
		//情况2
		else if (zhiling == "rename")  //重命名
		{
			string bename, afname;
			cin >> bename >> afname;
			if (is_essence(afname, arr) != -1)     //存在yyy的文件
			{
				continue;   //不操作
			}
			if (is_essence(bename, arr) != -1)     //存在xxx的文件
			{
				arr[is_essence(bename, arr)].name = afname;   //重命名
			}
		}
		else if (zhiling == "rm")   //删除
		{
			string name;
			cin >> name;
			if (is_essence(name, arr) != -1)    //存在xxx的文件
			{
				arr[is_essence(name, arr)].sign= 0;   //删除
			}
		}
		else   //输出
		{
			for (int i = 0;i < number;i++)
			{
				if (arr[i].sign == 1)   //存在
				{
					cout << arr[i].name << endl;
				}
			}
		}
	}

	system("pause");
	return 0;
}


http://www.kler.cn/a/408716.html

相关文章:

  • 全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS系统定制开发
  • HTML和CSS 表单、表格练习
  • springboot 使用笔记
  • oracle的静态注册和动态注册
  • STL——string类常用接口说明
  • archlinux安装waydroid
  • 关于springboot中使用AOP方式记录日志的思路和灵感
  • Python/GoLang/Java 多环境管理工具 pyenv/goenv/jenv
  • 16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗
  • CTF之密码学(Polybius密码)
  • 241124_基于MindSpore学习GPT2
  • C++ std::unique_ptr的使用及源码分析
  • 【Spring源码核心篇-03】精通spring的aop的底层原理和源码实现
  • c++(入门)
  • 群核科技首次公开“双核技术引擎”,发布多模态CAD大模型
  • 从零开始:使用 Spring Boot 开发图书管理系统
  • pip 与当前python环境版本不匹配, pyenv, pipenv, conda
  • 速盾:海外服务器使用CDN加速有什么优势?
  • [Python3学习笔记-基础语法] Python3 基础语法
  • Excel如何批量导入图片
  • UE5中T_noise 纹理的概述
  • 前端把dom页面转为pdf文件下载和弹窗预览
  • C语言蓝桥杯组题目
  • transformer.js(一):这个前端大模型运行框架的可运行环境、使用方式、代码示例以及适合与不适合的场景
  • C#里怎么样使用多线程读取多文件?
  • 深度学习实战图像缺陷修复