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