1301 相對路徑

來源:互聯網
上載者:User
描述

在經典的檔案系統中,檔案可以包含於檔案夾中,檔案夾也可包含於檔案夾中。在類Unix作業系統中,沒有盤符,只有一個根目錄 / ,所有的其他檔案或檔案夾都是它的直接或間接子目錄(子檔案)。

檔案可以表示如下:

/<directory>/<directory>/.../<directory>/<file>

如:/etc/apt/sources.list

檔案夾可以表示如下:

/<directory>/<directory>/.../<directory>

如:/var/www

類Unix作業系統中的大部分使用者都頻繁的使用shell(命令列互動介面),shell有一個目前的目錄,當使用者需要跳轉到別的目錄時,可以使用cd命令。例如:如果目前的目錄是 /home/yuki,執行 cd ../../var/www之後,目前的目錄就變成了/var/www 。“..” 表示父目錄, “../..” 則表示父目錄的父目錄。如果目標目錄是目前的目錄的子目錄,直接cd 目標目錄。如,目前的目錄為 / , 執行cd var 可以直接進入 /var 目錄。

類似的,現在就要你來解決一個簡單的問題,求目標檔案相對於當前檔案的路徑,類似於cd 命令後跟的參數,(求檔案相對路徑可以避免檔案夾 .. 和 ../ 的二義性)當然,在實際使用中,你完全可以使 /var/www(絕對路徑)直接定位檔案,不過這裡要求你用相對路徑。

 

輸入

輸入資料有多組,第一行為n,表示有n組資料。隨後每兩行為一組,第一行為目標路徑,第二行為當前路徑。檔案名稱總長度小於255,且僅包含小寫a-z的字母。

 

輸出

對於每組資料,輸出一行,跳轉的相對路徑。

範例輸入4/home/yuki/data/file/home/user/pictures/root/root/root/root/file//a/b/a/b/a/b/a/b/a/a/b/a/b範例輸出../../yuki/data/fileroot/rootfile../../../../b/a/b

這道題其實就是類比, 把所有情況考慮清楚就可以了, 就是比較兩個字串, 先看從哪個地方開始出現不同, 然後去看當前檔案夾的這個字串這個地方之後有多少個'/', 就會需要相應多少'..'的操作, 然後注意各種細節處理... 就是可能會麻煩點, 不難

#include <iostream>#include <string>using namespace std;int main(){    int t;    cin>>t;    string mu, dang;    for(int i=0; i<t; i++)    {        cin>>mu;        cin>>dang;        string s="";        int mu_len=mu.length();        int dang_len=dang.length();        int j=0;        int p=0;        if(dang=="/")            cout<<mu.substr(1)<<'\n';        else        {            int da=0;            while(j<mu_len && j<dang_len)            {                if(mu[j]==dang[j])                {                    if(mu[j]=='/')                    {                        p++;                        da=j;                    }                    j++;                }                else                {                    break;                }            }            if(j==dang_len && mu[j]=='/')            {                s=mu.substr(j+1);            }            else            {                j=da+1;                int k=j;                int kk=j;                int bo=0;                while(j<dang_len)                {                    if(dang[j]=='/')                    {                        s=s+"..";                        bo=1;                        break;                    }                    j++;                }                j++;                while(j<dang_len)                {                    if(dang[j]=='/')                    {                        s=s+"/..";                    }                    j++;                }                if(bo==1)                    s=s+"/..";                else                    s=s+"..";                if(k<mu_len)                {                    while(k<mu_len)                    {                        if(mu[k]=='/')                        {                            s=s+"/"+mu.substr(kk, k-kk);                            kk=k+1;                        }                        k++;                    }                    s=s+"/"+mu.substr(kk);                }            }            cout<<s<<'\n';        }    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.