#include<iostream> #include<string> #include<vector> using namespace std; //相對路徑轉絕對路徑,vector實現 //輸入路徑:/home/abs/../temp/new/../ ,輸出路徑為:/home/temp vector<string> pathChange(string input){ vector<string> inputpath,outputpath; string tmp; for(int i=0;i<input.size();i++){ //將input字符串按‘/’分開存儲到inputpath if(input[i] != '/'){ //向量中。 注意:第一個為空字符串! tmp+=input[i]; } else{ inputpath.push_back(tmp); tmp.clear(); } } while(!inputpath.empty()){ //判斷vector最后一個數據是否為“..”,若 if(inputpath.back() != ".."){ //是,則連續2次刪除尾數據,若否,則將尾數 tmp = inputpath.back(); //據存到outputpath中,並刪除inputpath中的 outputpath.push_back(tmp); //尾數據。 inputpath.pop_back(); } else{ inputpath.pop_back(); inputpath.pop_back(); } } while(!outputpath.empty()){ //將outputpath中的數據從尾到頭轉 inputpath.push_back(outputpath.back()); //存到inputpath中的從頭到尾中 outputpath.pop_back(); } return inputpath; } int main(){ string input = "/home/abs/../temp/new/../",output; vector<string> outputpath; cout<<"輸入相對路徑:"<<input<<endl; outputpath = pathChange(input); cout<<"輸出絕對路徑:"; for(unsigned i=1;i<outputpath.size();i++) cout<<"/"<<outputpath.at(i); //由上述函數可以outputpath首數據 cout<<endl; //為空! return 0; }