CSP201604-3 路径解析

 

思路分析:

  这道题要求把所有的路径都转化成不含".."或"."的绝对路径输出,首先我们对于输入的字符串就要判断它是绝对路径还是相对路径,所以我们读入的字符串首先判断str【0】==‘/’。 对于相对路径,我们将根节点和这个相对路径做一个拼接,转化成绝对路径。

  接下来就是对".."和"."以及"//"的处理。 对于.. , 我们要找到每一个这样字符串的地方,然后删掉/..前面的一个路径和 .. 即可。对于 . 我们直接删掉即可。然后找到//删掉即可。

  最后输出正规化之后的绝对路径。

代码:

#include<iostream>
#include<sstream>
using namespace std;

int main() {
    int n, pos, pos1;
    
    string root;
    cin >> n >> root;
    getchar();
    while (n--) {
        string str;
        getline(cin, str);
        if (str.empty()) str = root;                
        else if (str[0] != '/') str = root + "/" + str;
        while ((pos = str.find("/../")) != -1){
            if (!pos)str.erase(0, 3);
            else {                
                pos1 = str.rfind("/", pos - 1);
                str.erase(pos1, pos - pos1 + 3);
            }
        }
        while ((pos = str.find("/./")) != -1) str.erase(pos, 2);
        while ((pos = str.find("//")) != -1) str.erase(pos,1);
        if (str.size() > 1 && str[str.size() - 1] == '/') str.erase(str.size() - 1, 1);
        cout << str << endl;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Xu-SDU/p/13080086.html