LeetCode_Simplify Path

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

Corner Cases:
Did you consider the case where path = "/../"?
In this case, you should return "/".
Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
In this case, you should ignore redundant slashes and return "/home/foo".

  

class Solution {
public:
    string simplifyPath(string path) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<string>  tp;
        string res;
        int len = path.size();
        if(len < 1) return string("/");
        const char * str = path.c_str();
        char buffer[512];
        int  pos = 0,num;
        do{
            buffer[0] = '';
            num = sscanf(str + pos,"/%[^/]/",buffer);
            int size = strlen(buffer);
            if(size == 0 && num == 0)// case ://
                  pos++;
            else if( size == 1){    //case :/./
                if(buffer[0] != '.')
                {
                    tp.push_back(string(buffer));
                }
                pos+= 2;
            }else if(size == 2 && buffer[0] =='.' && buffer[1] == '.'){//case : /../
                if(!tp.empty())
                     tp.pop_back();
                pos+=3 ;
            }else if(size > 1){ //case :normal
                
                 tp.push_back(string(buffer));
                pos = pos + 1 + size;
            }
            
        }while(-1 != num && pos <len );

        len = tp.size();

        if(len < 1)
            res+= '/';
        for(int i = 0; i< len ; i++)
        {
            res+='/';
            res+=tp[i];
        }

        return res;    
    }
};
原文地址:https://www.cnblogs.com/graph/p/3233815.html