题目一:
1.写一个函数,转换相对路径为绝对路径,比如:/home/abs/../temp/new/../,输出路径为:/home/temp
个人的解决方式如下:
#include <iostream>
#include <string>
#include <string.h>
#include <list>
using namespace std;
bool Convert(string &strTarget, char str[], string &strMsg)
{
list<string> ls;
list<string> ::iterator pos;
const char *tag = "/";
char *p;
p = strtok(str, tag);
while(p)
{
if(0 == strcmp(p, ".."))
{
if(0 == ls.size())
{
strMsg = "已经达到回退的上限";
return false;
}
else
ls.pop_back();
}
else
ls.push_back(p);
p = strtok(NULL, tag);
}
for(pos = ls.begin(); pos != ls.end(); ++pos)
strTarget = strTarget + "/" + *pos;
return true;
}
int main()
{
//char str[] = "/home/good/name/../../";
//char str[] = "/home/good/name/../../../../";
char str[] = "/home/../name/";
string strTarget, strMsg;
if(false == Convert(strTarget, str, strMsg))
cout<< strMsg;
else
cout<< strTarget;
}