Consulta ¿?

Publicado por oogie.boogie, Enero 17, 2014, 11:13:46 AM

Tema anterior - Siguiente tema

oogie.boogie

Hola: alguien me podria explicar cual es la diferencia entre este codigo ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-1);
                }
}

y este otro  ???
string get_filename(string url) {
        vector<string> resultado;
        if (url.find("?") != string::npos) {
            stringexplode(url, "?", &resultado);
            stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
        } else {
            stringexplode(url, "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
        }
}

o dicho de otra manera, por que en algunos casos se usa el primer codigo en la estructura if...else y en otros el segundo, e incluso, he llegado a ver que a veces ese loop se repite hasta un numero de 6,  ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
                }
}

ya que me gustaria aprender en que casos se debe usar uno u otro.
Gracias

peguerojs

Cita de: oogie.boogie en Enero 17, 2014, 11:13:46 AM
Hola: alguien me podria explicar cual es la diferencia entre este codigo ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-1);
                }
}

y este otro  ???
string get_filename(string url) {
        vector<string> resultado;
        if (url.find("?") != string::npos) {
            stringexplode(url, "?", &resultado);
            stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
        } else {
            stringexplode(url, "/", &resultado);
            return resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
        }
}

o dicho de otra manera, por que en algunos casos se usa el primer codigo en la estructura if...else y en otros el segundo, e incluso, he llegado a ver que a veces ese loop se repite hasta un numero de 6,  ???
string get_filename(string url) {
                vector<string> resultado;
                if (url.find("?") != string::npos) {
                        stringexplode(url, "?", &resultado);
                        stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1);           
                } else {
                        stringexplode(url, "/", &resultado);
                        return resultado.at(resultado.size()-6) + "_" + resultado.at(resultado.size()-5) + "_" + resultado.at(resultado.size()-4) + "_" + resultado.at(resultado.size()-3) + "_" + resultado.at(resultado.size()-2) + "_" +resultado.at(resultado.size()-1); ;
                }
}

ya que me gustaria aprender en que casos se debe usar uno u otro.
Gracias
esta muy buena tu pregunta esteremos atento a las respuestas de los moderadores ya que yo también tengo esa inquietud

luistec

Bueno, para responder esta pregunta lo voy a hacerlo con un ejemplo.

Para este ejemplo utilizare la siguiente url
http://espndeportes-assets.espn.go.com/2003/photos2014/0119/collage134.jpg

1.- Si en el codigo se usa

stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
return resultado.at(resultado.size()-1);

Lo que hará el codigo será buscar desde el final de la línea la cadena "/" y despues de ese valor será el resultado que se grabara en la base de datos, en este caso el resultado sería "collage134.jpg"

2.- Si en el codigo se usa
stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
return resultado.at(resultado.size()-2) + "_" + resultado.at(resultado.size()-1);

Lo que hará el codigo será buscar desde el final de la línea la cadena "/" y el resultado será lo que sigue despues del segundo "/", entonces el resultado que se grabara en la base de datos sera "0119_collage134.jpg"; tambien se puede ver que el "/" que va al medio ha sido remplazado por el "_", si uno observa en la misma linea del codigo puede ver este reemplazo.

Así este proceso se puede hacer sucesivamente, y porque se hace esto? ya que hay ocasiones en que las URLs de algunos contenidos en la parte final son iguales, pero los contenidos son diferentes; uno revisando las urls puede ver en que parte se diferencian y de acuerdo esto emplear el codigo respectivo, ya que si no se hace esto al momento de hacer HIT nos provocará un error o nos mostrara una imagen u otro contenido que no corresponde.

Saludos.

firecold

Gracias Luistec, mas claro ni el agua, Saludos

oogie.boogie

Muchas gracias por aclararme algo que tenia agarrado con alfileres, ahora esta todo mucho mas claro. :-*
Un cordial saludo !!  :)
PD: amigo firecold, la consulta ya esta contestada por el amigo luistec, cuando te conteste por el foro de thunder, aun no habia leido este mensaje, gracias de todos modos y hasta la proxima.