格式化路径

该程序实现了对输入的文件路径进行特殊处理的功能,包括将反斜杠转换为正斜杠,压缩连续的正斜杠,删除单独的点,处理..符号,并确保路径的合法性。如果路径无效或所有父目录都被删除,则输出相应错误。程序使用了白盒和黑盒测试方法以提高准确性。
摘要由CSDN通过智能技术生成

实现一个对输入的路径进行处理、并输出正确结果的程序。具体要求如下:

  • 所有输入中的\被当做/加以处理,且在输出中被转换为/
  • 连续多个/被压缩成一个。
  • 输入中单独的.被直接删除。若为连续的.,则参考下面一条规则。
  • 输入中的..会导致..之前的一级目录被删去。然而如果输入中已经不存在父目录,则直接输出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;   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值