实现一个对输入的路径进行处理、并输出正确结果的程序。具体要求如下:
- 所有输入中的
\
被当做/
加以处理,且在输出中被转换为/
。 - 连续多个
/
被压缩成一个。 - 输入中单独的
.
被直接删除。若为连续的.
,则参考下面一条规则。 - 输入中的
..
会导致..
之前的一级目录被删去。然而如果输入中已经不存在父目录,则直接输出Value Error
。保证不会出现...
、....
等不合法的情况。 - 如果输入为空,或者所有父目录被删去,则根据下面的规则输出空串或
/
。- 当且仅当输入以
/
开始(或以\
开始)时,输出才以/
开始。 - 无论输入是否以
/
结尾,输出的结尾不带有/
,除非输出是/
。
- 当且仅当输入以
使用之前学到的白盒测试和黑盒测试方法,尽量减少错误次数。能一次通过最好啦!
你可以使用任意语言完成这道题目,点击代码编辑区右上角的下拉选项就可以选择使用的语言了。
输入格式
输入 T(1 \leq T \leq 10)T(1≤T≤10) 行,每行为一个长度不超过 100100 的字符串(包含字母、数字、.
、\
和/
),表示输入的路径。
输出格式
输出 TT 行字符串,表示处理后的 TT 个路径。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char s[1000],st[1000][1000];
int main(){
while(scanf("%s",s)!=-1){
int n=strlen(s);
int cnt=0;
int flag=0;
for(int i=0;i<n;){
if(s[i]=='.'){
i++;
if(s[i]=='.'){
if(cnt==0){
flag=1;break;
}
cnt--;
i++;
}
while(s[i]=='/'||s[i]=='\\') {
i++;
}
}
if(isalpha(s[i])||isdigit(s[i])){
int tmp=0;
while(isalpha(s[i])||isdigit(s[i])||s[i]=='.'){
if(s[i]=='.'){i++;continue;}
st[cnt][tmp++]=s[i++];
}
st[cnt++][tmp]='\0';
while(s[i]=='/'||s[i]=='\\') {
i++;
}
}
while(s[i]=='/'||s[i]=='\\') {
i++;
}
}
if(flag){printf("Value Error\n");
continue;}
if(s[0]=='/'||s[0]=='\\') printf("/");
for(int i=0;i<cnt-1;i++) printf("%s/",st[i]);
if(cnt) printf("%s\n",st[cnt-1]);
else printf("\n");
}
return 0;
}