Resolución del camino

Tema: El camino para resolver
el significado de problemas:
Inserte la descripción de la imagen aquí

Entrada:
Inserte la descripción de la imagen aquí
Salida:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Ideas para resolver problemas: el problema de simulación csp T3, es encontrar un método; primero considere el directorio actual, debe ser una ruta absoluta (no se puede dar la ruta relativa, no piense aquí), luego no consideraremos relativa Ruta, solo se considera el primer 60% de los puntos, y solo se incluye la ruta absoluta aquí (esto no está relacionado con el directorio actual, y se puede normalizar de la misma manera que se normaliza el directorio actual). Entonces, esto comienza a involucrar cómo formalizar y modificar de acuerdo con los requisitos del tema.
Aquí hablo de mis pensamientos: en primer lugar, no pienso demasiado en ''. Un carácter en él), solo considere el '/';
después de conocer el '/', solo considero el personaje frente a él (independientemente de lo siguiente), si el frente es '/', se ignora, de lo contrario, continúe considerando /./ y / ... /; Finalmente, determine si la cola es un '/' o la cadena es un '/'.
Para el último 40%, se puede inicializar aquí, dejo que la cadena inicial sea el directorio actual normalizado y agrego '/', luego dejo que la ruta relativa dada sea precedida por '/', porque la ruta relativa definitivamente no será '/' Al principio. Luego, escanee nuevamente como el camino absoluto.

Código:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
string s;
bool flag=0;
string sol(string cs)
{
    string h="";
    if(flag==0)//判断绝对路径
    {
        h+='/';
        for(int i=1;i<cs.size();i++)
        {
            if(cs[i]=='/')
            {
                if(cs[i-1]=='/')
                {
                    continue;
                }else if(cs[i-1]=='.')
                {
                    if(cs[i-2]=='/'){continue;}
                    if(cs[i-2]=='.')
                    {
                        if(cs[i-3]=='/'){
                            if(h=="/"){continue;}
                            else{
                                if(h[h.size()-1]=='/')
                                {
                                    h=h.erase(h.size()-1,1);
                                }
                                for(int k=h.size()-1;h[k]!='/';k--)
                                {
                                    h=h.erase(k,1);
                                }
                                continue;
                            }
                        }
                        else{
                            h+='/';
                        }
                    }else
                    {
                        h+='/';
                    }
                }else{
                    h+='/';
                }
            }else if(cs[i]=='.')
            {
                if(cs[i-1]=='/'&&cs[i+1]=='/')
                {
                    continue;
                }else if(i+2<cs.size()&&(cs[i-1]=='/'&&cs[i+1]=='.'&&cs[i+2]=='/'))
                {
                    continue;
                }else if(i+1<cs.size()&&(cs[i+1]=='/'&&cs[i-1]=='.'&&cs[i-2]=='/'))
                {
                    continue;
                }else
                {
                    h+=".";
                }
            }else
            {
                h+=cs[i];
            }
        }
        if(h[h.size()-1]=='/'&&h!="/")
        {
            h=h.erase(h.size()-1,1);
        }
        flag=1;
        return h;
    }
    h=s+'/';
    cs='/'+cs;//相对路径初始化
    for(int i=1;i<cs.size();i++)
    {
        if(cs[i]=='/')
        {
            if(cs[i-1]=='/')
            {
                continue;
            }else if(cs[i-1]=='.')
            {
                if(cs[i-2]=='/'){continue;}
                if(cs[i-2]=='.')
                {
                    if(cs[i-3]=='/'){
                        if(h=="/"){continue;}
                        else{
                            if(h[h.size()-1]=='/')
                            {
                                h=h.erase(h.size()-1,1);
                            }
                            for(int k=h.size()-1;h[k]!='/';k--)
                            {
                                h=h.erase(k,1);
                            }
                            continue;
                        }
                    }
                    else{
                        h+='/';
                    }
                }else
                {
                    h+='/';
                }
            }else{
                h+='/';
            }
        }else if(cs[i]=='.')
        {
            if(cs[i-1]=='/'&&cs[i+1]=='/')
            {
                continue;
            }else if(i+2<cs.size()&&(cs[i-1]=='/'&&cs[i+1]=='.'&&cs[i+2]=='/'))
            {
                continue;
            }else if(i+1<cs.size()&&(cs[i+1]=='/'&&cs[i-1]=='.'&&cs[i-2]=='/'))
            {
                continue;
            }else
            {
                h+=".";
            }
        }else
        {
            h+=cs[i];
        }
    }
    if(h[h.size()-1]=='/'&&h!="/")
    {
        h=h.erase(h.size()-1,1);
    }
    return h;
}
int main()
{
    int p;
    cin>>p;
    cin>>s;
    string t=s;
    s=sol(t);
    string cnt;
    char c=getchar();
    while(p--)
    {
        getline(cin,cnt);
        if(cnt.empty())//判断是否是空的
        {
            cout<<s<<endl;
            continue;
        }
        if(cnt[0]=='/')//判断一下
        {
            flag=0;
        }
        cnt=sol(cnt);
        cout<<cnt<<endl;
    }
}
PGZ
Publicado 34 artículos originales · elogiado 0 · visitas 869

Supongo que te gusta

Origin blog.csdn.net/qq_43653717/article/details/105254626
Recomendado
Clasificación