71.简化路径

以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径

请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

示例 1:

输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。
示例 2:

输入:"/…/"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
示例 3:

输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
示例 4:

输入:"/a/./b/…/…/c/"
输出:"/c"
示例 5:

输入:"/a/…/…/b/…/c//.//"
输出:"/c"
示例 6:

输入:"/a//bc/d//././/…"
输出:"/a/b/c"

来源:力扣(LeetCode)

敲到最后发现有几个特别的过不去,如果只是为了A,那特判即可。
说一下思路,就是以‘/’为边界分割字符串,如果是“。。”那么出栈;如果是“。”,不管即可;如果是其他目录,入栈即可
所以就是如何分割字符串了。C语言可以用 stroke,c++可以用stringstream和getline,java 可以用split即可

/*c++版,模拟分割*/

class Solution {
public:
   string simplifyPath(string path) {
       path+='/';
       stack<string>st;//当时用的char,没想到啊
       string tep;
       for(auto am : path){
           if(am=='/'){
               if(tep==".."){
                   if(!st.empty())st.pop();
               }else if(tep=="."){

               }else if(!tep.empty()){
                   st.push(tep);
               }
               tep.clear();
           }
           else tep+=am;
       }
        string ans;
        int size=st.size();
        for(int i=0;i<size;i++){
        	//后面有翻转,这里先翻转。负负得正
            ans+=string(st.top().rbegin(),st.top().rend())+'/';
            st.pop();
        }
        reverse(ans.begin(),ans.end());
        return ans.empty()?"/":ans;
    }
};
  /*  c++ stringstream 与getline  ,这里为了简便用vector模拟栈,更加节约时间
*/
  string simplifyPath(string path) {
        vector<string>st;
        stringstream str;
        str.str(path);
        string tep="";
        while(getline(str,tep,'/')){
            if(tep==".."){
                if(!st.empty()) st.pop_back();
            } 
            else if(tep==".");
            else if(!tep.empty()) st.push_back('/'+tep);
        }
        string ans;
        for(auto a:st) ans+=a;
        return ans.empty()?"/":ans;
    }

istream& getline (istream& is, string& str, char delim);
is :表示一个输入流,例如 cin。所以我们要把string 转为流
str :string类型的引用,用来存储输入流中的流信息。
delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: os.path.join是一个用于拼接路径的方法,主要用于在不同操作系统中正确的拼接文件和文件夹的路径。无论是Windows系统、Linux系统还是macOS系统,os.path.join方法都能够保证路径的正确拼接和格式化。 使用os.path.join拼接路径的语法很简单,只需要将要拼接的路径作为参数传入即可。这些路径可以是字符串类型的文件名或文件夹名,也可以是变量、常量等。 os.path.join方法会根据操作系统自动识别路径分隔符,并将路径拼接成正确的格式。在Windows系统中,路径分隔符是反斜杠(\),在Linux和macOS系统中,路径分隔符是正斜杠(/)。因此,os.path.join方法会根据不同的操作系统自动选择相应的路径分隔符进行拼接。 下面是一个示例用法: ``` import os dir_path = "parent_folder" file_name = "example.txt" # 使用os.path.join拼接路径 file_path = os.path.join(dir_path, file_name) # 输出拼接后的路径 print(file_path) ``` 以上代码拼接了一个文件路径,将`parent_folder`作为文件夹路径,`example.txt`作为文件名。无论在哪个操作系统中运行,os.path.join方法都会根据当前系统自动选择相应的路径分隔符进行拼接,所以输出的结果是正确的路径。 os.path.join的使用可以避免手动拼接路径时可能出现的格式错误,确保路径的正确性和可移植性。这在处理文件、文件夹的路径时非常有用。 ### 回答2: os.path.join 是Python中os模块中的一个函数,用于拼接文件路径。它接受任意数量的参数,并将它们连接起来形成一个有效的文件路径。 使用os.path.join可以避免手动拼接路径时出现的一些问题。它会自动根据操作系统的不同来确定正确的路径分隔符,无论是斜杠还是反斜杠。 例如,在Windows系统上,使用os.path.join可以将两个路径拼接起来,形成一个新的路径。比如: ```python import os path1 = 'C:\\Users\\' path2 = 'Documents\\file.txt' new_path = os.path.join(path1, path2) print(new_path) ``` 输出的结果为: ``` C:\Users\Documents\file.txt ``` 在这个例子中,`C:\\Users\\` 是第一个路径,`Documents\\file.txt` 是第二个路径。使用os.path.join函数将它们拼接在一起,生成了`C:\Users\Documents\file.txt` 这个新的路径。 无论在哪个操作系统上运行,os.path.join都会根据当前系统的路径规则正确地拼接路径。这样就避免了手动拼接路径时需要关注不同操作系统的路径规则的麻烦。 总之,os.path.join是一个非常便利的函数,可以简化路径拼接的工作,确保生成的路径在任何操作系统上都是有效的。 ### 回答3: os.path.join是Python中的一个函数,用于将多个路径组合起来,生成新的路径。 它的作用是根据操作系统的不同,自动选择正确的路径分隔符(/或\),并将多个路径片段连接在一起。 使用os.path.join非常简单,只需要将要拼接的路径片段作为参数传递给函数即可。例如: import os path = os.path.join('home', 'user', 'Documents', 'file.txt') print(path) 上述代码中,我们传递了4个路径片段给os.path.join函数,函数会根据操作系统的不同,自动选择正确的路径分隔符将它们连接起来。最终生成的路径为:home/user/Documents/file.txt。 这样做的好处是,我们不需要关心操作系统的不同,就可以在不同的平台上正确地连接路径。这对于编写可移植的代码非常有帮助。 需要注意的是,os.path.join只会进行路径的拼接,不会检查生成的路径是否存在或有效。如果需要检查路径的有效性,可以使用os.path.exists函数。 总结:os.path.join函数是Python中用于路径拼接的函数,它会根据操作系统的不同选择正确的路径分隔符,将多个路径片段连接在一起。使用os.path.join可以简化路径操作的代码,提高代码的可移植性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值