Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: rodrial12 en 15 Septiembre 2014, 02:27 am



Título: Ayuda con C++ y ordenar vector de strings
Publicado por: rodrial12 en 15 Septiembre 2014, 02:27 am
Estimados como estan?
Necesito ayuda con la siguiente funcion
char **orderVecStrings(char **vecStr, int largoVecStr)
    {

}
lo que sucede es que no se como se debe de leer char **vecStr
largoVecStr es el largo de vecStr
A partir de un vector de strings vecStr de largo largoVecStr, retorna un nuevo vector ordenado que no comparte memoria con el vector original.

Ejemplo 1
Entrada
vecStr: hola, abholaz largoVecStr: 2
Retorno:
vector retornado: abholaz, hola
Ejemplo 2
Entrada
vecStr: jj, ababa, ab largoVecStr: 3
Retorno
vector retornado: ab, ababa, jj

Muchas gracias!!


Título: Re: Ayuda con C++ y ordenar vector de strings
Publicado por: eferion en 15 Septiembre 2014, 08:35 am
El código, si lo decoras con las etiquetas GeSHi, mejor. Además es un requisito en el foro :)

Si quieres currarte todo el código deberías montar un par de bucles para comparar las cadenas de dos en dos usando, por ejemplo, el algoritmo de burbuja. Para comparar las cadenas puedes usar la función strcmp. Si las cadenas no están en orden, simplemente las intercambias. Para eso puedes usar un string temporal y la función strcpy. Este código no te lo pongo porque no se hacen tareas. Puedes intentar hacerlo tu mismo y volver cuando tengas dudas sobre TU código.

Otra de las muchas formas de hacerlo, esta vez usando la clase string y las bondades de la stl:

Código
  1. std::vector< std::string > orderVecStrings(
  2.          std::vector< std::string > vecStr, int /*largoVecStr*/ )
  3. {
  4.  std::sort( vecStr.begin( ), vecStr.end( ), std::less< std::string >( ) );
  5.  return vecStr;
  6. }

También se pueden ordenar usando el contenedor 'set':

Código
  1. std::vector< std::string > orderVecStrings(
  2.          std::vector< std::string > vecStr, int /*largoVecStr*/ )
  3. {
  4.  std::set< std::string > temp{ vecStr.begin( ), vecStr.end( ) };
  5.  return std::vector< std::string >{ temp.begin( ), temp.end( ) };
  6. }

En cualquiera de los dos casos, ves que ya no se hace necesario el uso del segundo argumento de la función.