Simplify Path

题目大意:给一个Unix风格的文件的绝对路径,将其进行简化。例如:
                 路径 "/home/", => "/home"

                 路径 "/a/./b/../../c/", => "/c"

思路分析:利用栈。

代码如下:

char* simplifyPath(char* path) {
    int i, t=1;
    int len = strlen(path);
    path[0] = '/';
    for(i=1; i<len; i++) {
        if(path[i]=='.' && ((i+1<len && path[i+1]=='/') || path[i+1]=='\0')) {   //处理"."
            i = i + 1;
        } else if(path[i]=='.' && i+1<len && path[i+1]=='.' && ((i+2<len && path[i+2]=='/') || path[i+2]=='\0')) {   //处理“..”
            i = i + 2;
            t = t - 2 < 0? 0: t-2;
            while(path[t]!='/') {   // 出栈,退回到上一级目录处
                t--;
            }
            t++;
        } else if(path[i]=='/') {    //过滤连续的斜杠(比如“”)的情况
            continue;
        } else {                      //其他情况则进行入栈操作
            do {
                path[t++] = path[i++];
            } while(i<len && path[i]!='/');
            path[t++] = path[i];
        }
    }
    if(t>1) {                     //如果最后只剩下“/”则特殊处理一下。
        path[t-1] = '\0'; 
    } else {
        path[t] = '\0';
    }
    return path;
}


注意事项:"..."在Unix下是合法的路径名。路径中出现连续的“///”需要将其简化为“/”。“/../../..”简化之后的路径是“/”

上面的代码略显繁琐,如果更好地处理一下代码逻辑可能会更简洁一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值