0
点赞
收藏
分享

微信扫一扫

XDOJ-84-目录操作

婉殇成长笔记 2022-03-11 阅读 58

@[top]XDOJ-84-目录操作

问题描述
在操作系统中,文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。
有一个特殊的目录被称为根目录,是整个文件系统形成的这棵树的根节点,在类Linux系统中用一个单独的 “/”符号表示。
因此一个目录的绝对路径可以表示为“/d2/d3”这样的形式。
当前目录表示用户目前正在工作的目录。为了切换到文件系统中的某个目录,可以使用“cd”命令。
假设当前目录为“/d2/d3”,下图给出了cd命令的几种形式,以及执行命令之后的当前目录。

当前目录目录切换命令命令含义执行命令后的当前目录
/d2/d3cd /切换到根目录/
/d2/d3cd …(两个点)切换到当前目录的上级目录/d2
/d2/d3cd d4/d5切换到当前目录下的某个子目录/d2/d3/d4/d5
/d2/d3cd /d1/d5切换到某个绝对目录所指的目录/d1/d5

现在给出初始时的当前目录和一系列目录操作指令,请给出操作完成后的当前目录。

输入说明
第一行包含一个字符串,表示当前目录。
后续若干行,每行包含一个字符串,表示需要进行的目录切换命令。
最后一行为pwd命令,表示输出当前目录
注意:

  1. 所有目录的名字只包含小写字母和数字,cd命令和pwd命令也都是小写。最长目录长度不超过200个字符。
  2. 当前目录已经是根目录时,cd … 和cd /不会产生任何作用

输出说明
输出一个字符串,表示经过一系列目录操作后的当前目录

输入样例
/d2/d3/d7
cd …
cd /
cd /d1/d6
cd d4/d5
pwd

输出样例
/d1/d6/d4/d5

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
	char ord[100];    // 命令 
	char tempor[100]; // 当前目录 
	
	gets(tempor);
	while (strcmp(gets(ord), "pwd") != 0)
	{
		if (strcmp(ord, "cd /") == 0)//根目录 
		{
			if (strcmp(tempor, "/") != 0)
				strcpy(tempor, "/\0");	
		}
		if (strcmp(ord, "cd ..") == 0)//当前目录的上级目录 
		{
			for (int i = strlen(tempor) - 1; i >= 0; i--)//从后往前找到第一个'/' 
			{
				if (tempor[i] == '/' && i != 0)//判断是否已经是根目录 
				{
					tempor[i] = '\0';
					break;
				}
				else if (i == 0)
					strcpy(tempor, "/\0");
			}
		}
		if (strncmp(ord, "cd ", 3) == 0 && strcmp(ord, "cd ..") != 0 && strcmp(ord, "cd /") != 0)//当前目录的某个子目录
		{//需要注意与其它条件的区分 
			if (strcmp(tempor, "/") != 0)//是否是根目录 
			{
				int k = strlen(tempor);
				tempor[k] = '/';
				strcpy(tempor + k + 1, ord+3); 
			}
			else
				strcpy(tempor + 1, ord + 3);
		}
		if (strncmp(ord, "cd /", 4) == 0 && strcmp(ord, "cd /") != 0)//切换绝对目录 
			sprintf(tempor, "%s\0", ord + 3);
//		printf("%s\n", tempor);
	}
	puts(tempor);
	
	return 0;
}
举报

相关推荐

字符删除-xdoj

成绩处理-xdoj

密码强度-xdoj

单词排序-xdoj

xdoj 元素放置

XDOJ67查找元素

xdoj字符串查找

0 条评论