【LeetCode/C++】71. 簡化路徑:利用stringstream和getline分割字符串

以LeetCode 71. 簡化路徑 爲例:

class Solution {
public:
    string simplifyPath(string path) {
        if(path.size()<=1)return path;

        stringstream is(path);

        vector<string> strs;
        string tmp;
        while(getline(is,tmp,'/'))
        {
            if(tmp.size()==0||tmp==".")continue;

            if(tmp=="..")
            {
                if(!strs.empty())strs.pop_back();
                continue;
            }

            strs.push_back(tmp);
        }

        path="";
        for(int j=0;j<strs.size();++j)
        {
            path+="/"+strs[j];
        }

        if(strs.empty())path="/";

        return path;
    }
};

此外在知乎看到一個相關C++字符串分割的

https://www.zhihu.com/question/36642771

不明覺厲,mark一下,後續再說:sregex_token_iterator

class Solution {
public:
    string simplifyPath(string path) {
        if(path.size()<=1)return path;

        regex rx("/");
        vector<string> sub(sregex_token_iterator(path.begin(),path.end(),rx,-1),sregex_token_iterator());

        vector<string> sk;
        for(int i =0;i<sub.size();++i)
        {
            if(sub[i].size()==0||sub[i]==".")continue;

            if(sub[i]=="..")
            {
                if(!sk.empty())sk.pop_back();
                continue;
            }

            sk.push_back(sub[i]);
        }

        path="/";
        for(int j=0;j+1<sk.size();++j)//unsigned int(-1)的值是最大的unsigned int,即4294967295
        {
            cout<<sk[j]<<endl;
            path+=sk[j];
            path+="/";
        }

        if(!sk.empty())path+=sk.back();

        return path;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章