洛谷 P8824 [传智杯 #3 初赛] 终端 C语言

题目:

https://www.luogu.com.cn/problem/P8824

题目描述

有一天您厌烦了电脑上又丑又没用的终端,打算自己实现一个 Terminal。

具体来说,它需要支持如下命令:

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

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

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

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

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

输入格式

第一行一个整数 n ,表示总共要执行的操作数。

接下来 n 行,每行一个字符串,表示一条命令。

输出格式

对于每个 ls 命令,请输出若干行,每行一个字符串,表示一个文件,如果当前并没有任何文件,则什么都不输出。

请注意本题时限为 3s,输入输出规模较大,请注意常数因素对耗时的影响,我们不会给使用 Java 和 Python 的选手增加额外的运行时间。

思路:

我们可以使用cin提取到每行第一个字符串的命令,根据命令行驶函数。每个命令都要利用遍历去实行功能。注释我打的很清晰,看注释就好了。

复制代码
#include<iostream>
#include<string>
using namespace std;
int n;
string line[1005];//储存字符串
void fun1(string s,int i)//tounch函数 
{
	for(int k = 1 ; k <= i ; k++)
	{
		if(s == line[k])
		break;//有相同部分就不创新 
	}
	line[i] = s;//没找到就自己创新一个 
}
void fun2(string s,int i)//rm函数 
{
	for(int k = 1 ; k <= i ; k++)
	{
		if(s == line[k])
		{
			line[k].clear();//找到目标可以删除字符串 
			break;
		}
	}
}
void fun3(string s1,string s2,int i)//rename函数 
{
	bool found1,found2;
	found1 = found2 = false;//两个为true作为可以执行的条件 
	int pos1 = -1,pos2 = -1;//记录下标 
	for(int k = 1 ; k <= i ; k++)
	{
		if(line[k] != s2)//不存在s2文件 
		{
			found2 = true;
			pos2 = k;
		}
		if(line[k] == s1)//存在s1文件 
		{
			found1 = true;
			pos1 = k;
		}
	}
	
	if(found1 && found2)//条件成功可以修改 
	{
		line[pos1] = s2;
	 } 
	
}
void fun4(int i)//ls函数 
{
	for(int k = 1 ; k <= i ; k++ )
	{
		if(!line[k].empty())//判断字符串是否为空 
		cout << line[k] <<endl;
	}
}
int main(void)
{
	cin >> n;
	string a,b,c;
	for(int i = 1 ; i <= n ; i++)
	{
		cin >> a;
		if(a == "touch")
		{
			cin >> b;
			fun1(b,i); 
		}
		else if(a == "rm")
		{
			cin >> b;
			fun2(b,i);
		}
		else if(a == "rename")
		{
			cin >> b >> c;
			fun3(b,c,i); 
		}
		else if(a == "ls")
		{
			fun4(i); 
		}
	}
	return 0;
 } 
相关推荐
边境悍匪5 分钟前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云
万物智能信息科技18 分钟前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
蓝悦无人机31 分钟前
Qt Design Studio(QDS)4.8.2项目文件结构详解
开发语言·qt·qt creator·qds·项目文件结构·qtc
yxlalm1 小时前
4.java秒杀项目第四课-后端商品后台接口
java·开发语言
孙启超1 小时前
【AI开发之Rust】第 1 课:认识 Rust 与开发环境 —— 装好工具链,跑通第一个程序
开发语言·人工智能·后端·ai·rust·安全架构
君顾11 小时前
家政派单小程序源码开发实战:从零搭建到上线全流程指南
java·开发语言·家政派单
番茄灭世神2 小时前
汇顶模拟前端GH3220使用备忘录
c语言·单片机·传感器·模拟芯片·电生理信号处理
我是唐青枫2 小时前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
开发语言·c#·.net
程序猿编码2 小时前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer
SEO_juper3 小时前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化