@[top]XDOJ-84-目录操作
问题描述
在操作系统中,文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。
有一个特殊的目录被称为根目录,是整个文件系统形成的这棵树的根节点,在类Linux系统中用一个单独的 “/”符号表示。
因此一个目录的绝对路径可以表示为“/d2/d3”这样的形式。
当前目录表示用户目前正在工作的目录。为了切换到文件系统中的某个目录,可以使用“cd”命令。
假设当前目录为“/d2/d3”,下图给出了cd命令的几种形式,以及执行命令之后的当前目录。
当前目录 | 目录切换命令 | 命令含义 | 执行命令后的当前目录 |
---|---|---|---|
/d2/d3 | cd / | 切换到根目录 | / |
/d2/d3 | cd …(两个点) | 切换到当前目录的上级目录 | /d2 |
/d2/d3 | cd d4/d5 | 切换到当前目录下的某个子目录 | /d2/d3/d4/d5 |
/d2/d3 | cd /d1/d5 | 切换到某个绝对目录所指的目录 | /d1/d5 |
现在给出初始时的当前目录和一系列目录操作指令,请给出操作完成后的当前目录。
输入说明
第一行包含一个字符串,表示当前目录。
后续若干行,每行包含一个字符串,表示需要进行的目录切换命令。
最后一行为pwd命令,表示输出当前目录
注意:
- 所有目录的名字只包含小写字母和数字,cd命令和pwd命令也都是小写。最长目录长度不超过200个字符。
- 当前目录已经是根目录时,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;
}