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