Simplify Path

来源:互联网 发布:整形医院网络咨询技巧 编辑:程序博客网 时间:2024/05/23 19:15
题目大意:给一个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
原创粉丝点击