CCF201604-3路径解析

    xiaoxiao2026-03-02  8

    题目

    本题会给出一些路径,要求对于每个路径,给出正规化以后的形式。一个路径经过正规化操作后,其指定的文件不变,但是会变成一个不包含 . 和 .. 的绝对路径,且不包含连续多个 / 符号。如果一个路径以 / 结尾,那么它代表的一定是一个目录,正规化操作要去掉结尾的 /。若这个路径代表根目录,则正规化操作的结果是 /。若路径为空字符串,则正规化操作的结果是当前目录。 输入格式   第一行包含一个整数 P,表示需要进行正规化操作的路径个数。   第二行包含一个字符串,表示当前目录。   以下 P 行,每行包含一个字符串,表示需要进行正规化操作的路径。 输出格式   共 P 行,每行一个字符串,表示经过正规化操作后的路径,顺序与输入对应。 样例输入 7 /d2/d3 /d2/d4/f1 ../d4/f1 /d1/./f1 /d1///f1 /d1/ /// /d1/../../d2 样例输出 /d2/d4/f1 /d2/d4/f1 /d1/f1 /d1/f1 /d1 / /d2 评测用例规模与约定   1 ≤ P ≤ 10。   文件和目录的名字只包含大小写字母、数字和小数点 .、减号 - 以及下划线 _。   不会有文件或目录的名字是 . 或 .. ,它们具有题目描述中给出的特殊含义。   输入的所有路径每个长度不超过 1000 个字符。   输入的当前目录保证是一个经过正规化操作后的路径。   对于前 30% 的测试用例,需要正规化的路径的组成部分不包含 . 和 .. 。   对于前 60% 的测试用例,需要正规化的路径都是绝对路径。

    解题思路

    字符串剪切,栈操作(pop来模拟”..”上一级目录)

    代码

    #include<iostream> #include<string> #include<vector> using namespace std; // 分割 vector<string> split(string str,string ch); // 处理 string handle(vector<string> v); vector<string> vCurPath; string curPath; int main() { // 处理输入 int num=0; cin>>num; cin>>curPath; vCurPath=split(curPath,"/"); string* arr=new string[num]; for (int i = 0; i < num; ++i) { cin>>arr[i]; } // 计算 vector<string> v; for (int i = 0; i < num; ++i) { v=split(arr[i],"/"); string res=handle(v); cout<<res<<endl; } return 0; } vector<string> split(string str,string ch){ int a=0,b=0; b=str.find(ch,a); string temp; std::vector<string> v; while(b!=string::npos){ temp=str.substr(a,b-a); v.push_back(temp); a=b+1; b=str.find(ch,a); } temp=str.substr(a); v.push_back(temp); return v; } string handle(vector<string> v){ vector<string> vTemp; // int end=vTemp.size()-1; // 相对目录 if(v[0]!=""){ vTemp=vCurPath; vTemp.erase(vTemp.begin()); } for (int i = 0; i < v.size(); ++i) { if(v[i]=="."||v[i]==""){ continue; }else if (v[i]=="..") { if(vTemp.size()!=0) vTemp.pop_back(); continue; }else{ vTemp.push_back(v[i]); } } string res; for (int i = 0; i < vTemp.size(); ++i) { res=res+"/"+vTemp[i]; } // 根目录 if(vTemp.size()==0){ res="/"; } return res; }
    转载请注明原文地址: https://ju.6miu.com/read-1307547.html
    最新回复(0)