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