当前位置: 首页 > 工具软件 > meow > 使用案例 >

Meow Meow Path

谢烨烨
2023-12-01

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;
}
 类似资料:

相关阅读

相关文章

相关问答