meopass最近碰到了UnixUnix相关的问题。
给出一个绝对路径,他需要把这个路径给简化了。
例如:
path = “/rua/meow/.././” => “/rua”
path = “/meow/./../a” => “/a”
.. :回退到上一个路径
. : 保持当前路径
/ : 分隔符
现在需要你输出化简后的路径,要求化简后的路径末尾不包含分隔符。
Input
数据包含多组样例,如果路径非法输出”-1”。
Output
对于每次询问输出一个答案,每个答案占一行。
忽略每行输出的末尾多余空格
样例输入
/rua/meow/.././
/meow/./../a
/a/../
样例输出
/rua
/a
-1
用栈维护也很简单,重点是截取字符串
#include<iostream>
#include<stack>
#include<cstdio>
#include<cstring>
using namespace std;
char str[10000];
char tempstr[50];
const char * d = "/" ;
char *p;
int main()
{
while(scanf("%s", str)!=EOF)
{
int falg=1;
if (str[0]!='/')
{
cout<<-1<<endl;
continue;
}
p=strtok(str,d);
stack <string > S,S2;
while(p)
{
string t=p;
if (t=="..")
{
if(S.size()==0)
{
falg=-1;
break;
}
else
{
S.pop();
}
}
else if (t==".")
;
else
S.push(t);
p=strtok(NULL,d);
}
if (S.size()==0||falg==-1)
cout<<-1<<endl;
else
{
while(!S.empty())
{
S2.push(S.top());
S.pop();
}
while(!S2.empty())
{
cout<<"/"<<S2.top();
S2.pop();
}
cout<<endl;
}
}
return 0;
}