以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;
}
};