91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何簡化路徑

發布時間:2022-03-28 13:53:05 來源:億速云 閱讀:182 作者:iii 欄目:大數據

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

簡化路徑

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

C++ 解法一:

class Solution {
public:
    string simplifyPath(string path) {
        vector<string> 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語言中的函數strtok來分隔字符串,但是需要把string和char*類型相互轉換,轉換方法請猛戳這里。除了這塊不同,其余的思想和上面那種解法相同,代碼如下:

C 解法一:

class Solution {
public:
    string simplifyPath(string path) {
        vector<string> 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++中也有專門處理字符串的機制,我們可以使用stringstream來分隔字符串,然后對每一段分別處理,思路和上面的方法相似,參見代碼如下:

C++ 解法二:

class Solution {
public:
    string simplifyPath(string path) {
        string res, t;
        stringstream ss(path);
        vector<string> 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<String> 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<String> list = new ArrayList(s);
        return "/" + String.join("/", list);
    }
}

感謝各位的閱讀,以上就是“C++如何簡化路徑”的內容了,經過本文的學習后,相信大家對C++如何簡化路徑這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

广河县| 德州市| 云南省| 磐安县| 镇沅| 齐河县| 霍林郭勒市| 普兰县| 东乡县| 日照市| 陆河县| 铜鼓县| 静宁县| 碌曲县| 凌云县| 孝感市| 张北县| 乐至县| 泰州市| 台湾省| 东源县| 五大连池市| 安丘市| 嵊泗县| 黄冈市| 二手房| 进贤县| 中宁县| 铜鼓县| 河东区| 黑龙江省| 怀集县| 曲麻莱县| 乌海市| 正定县| 泰州市| 成都市| 江门市| 龙里县| 儋州市| 十堰市|