真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++如何簡化路徑

這篇文章主要講解了“C++如何簡化路徑”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++如何簡化路徑”吧!

10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有萍鄉(xiāng)免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

簡化路徑

這道題讓簡化給定的路徑,光根據(jù)題目中給的那一個例子還真不太好總結(jié)出規(guī)律,應(yīng)該再加上兩個例子 path = "/a/./b/../c/", => "/a/c"和path = "/a/./b/c/", => "/a/b/c", 這樣我們就可以知道中間是"."的情況直接去掉,是".."時刪掉它上面挨著的一個路徑,而下面的邊界條件給的一些情況中可以得知,如果是空的話返回"/",如果有多個"/"只保留一個。那么我們可以把路徑看做是由一個或多個"/"分割開的眾多子字符串,把它們分別提取出來一一處理即可,代碼如下:

C++ 解法一:

class Solution {
public:
    string simplifyPath(string path) {
        vector v;
        int i = 0;
        while (i < path.size()) {
            while (path[i] == "/" && i < path.size()) ++i;
            if (i == path.size()) break;
            int start = i;
            while (path[i] != "/" && i < path.size()) ++i;
            int end = i - 1;
            string s = path.substr(start, end - start + 1);
            if (s == "..") {
                if (!v.empty()) v.pop_back(); 
            } else if (s != ".") {
                v.push_back(s);
            }
        }
        if (v.empty()) return "/";
        string res;
        for (int i = 0; i < v.size(); ++i) {
            res += "/" + v[i];
        }
        return res;
    }
};

還有一種解法是利用了C語言中的函數(shù)strtok來分隔字符串,但是需要把string和char*類型相互轉(zhuǎn)換,轉(zhuǎn)換方法請猛戳這里。除了這塊不同,其余的思想和上面那種解法相同,代碼如下:

C 解法一:

class Solution {
public:
    string simplifyPath(string path) {
        vector v;
        char *cstr = new char[path.length() + 1];
        strcpy(cstr, path.c_str());
        char *pch = strtok(cstr, "/");
        while (pch != NULL) {
            string p = string(pch);
            if (p == "..") {
                if (!v.empty()) v.pop_back();
            } else if (p != ".") {
                v.push_back(p);
            }
            pch = strtok(NULL, "/");
        }
        if (v.empty()) return "/";
        string res;
        for (int i = 0; i < v.size(); ++i) {
            res += "/" + v[i];
        }
        return res;
    }
};

C++中也有專門處理字符串的機(jī)制,我們可以使用stringstream來分隔字符串,然后對每一段分別處理,思路和上面的方法相似,參見代碼如下:

C++ 解法二:

class Solution {
public:
    string simplifyPath(string path) {
        string res, t;
        stringstream ss(path);
        vector v;
        while (getline(ss, t, "/")) {
            if (t == "" || t == ".") continue;
            if (t == ".." && !v.empty()) v.pop_back();
            else if (t != "..") v.push_back(t);
        }
        for (string s : v) res += "/" + s;
        return res.empty() ? "/" : res;
    }
};

Java 解法二:

public class Solution {
    public String simplifyPath(String path) {
        Stack s = new Stack<>();
        String[] p = path.split("/");
        for (String t : p) {
            if (!s.isEmpty() && t.equals("..")) {
                s.pop();
            } else if (!t.equals(".") && !t.equals("") && !t.equals("..")) {
                s.push(t);
            }
        }
        List list = new ArrayList(s);
        return "/" + String.join("/", list);
    }
}

感謝各位的閱讀,以上就是“C++如何簡化路徑”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C++如何簡化路徑這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


當(dāng)前文章:C++如何簡化路徑
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/gsgpih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部