Ayuda con C++ y ordenar vector de strings

Iniciado por rodrial12, 15 Septiembre 2014, 02:27 AM

0 Miembros y 1 Visitante están viendo este tema.

rodrial12

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!!

eferion

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 (cpp) [Seleccionar]

std::vector< std::string > orderVecStrings(
          std::vector< std::string > vecStr, int /*largoVecStr*/ )
{
  std::sort( vecStr.begin( ), vecStr.end( ), std::less< std::string >( ) );
  return vecStr;
}


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

Código (cpp) [Seleccionar]

std::vector< std::string > orderVecStrings(
          std::vector< std::string > vecStr, int /*largoVecStr*/ )
{
  std::set< std::string > temp{ vecStr.begin( ), vecStr.end( ) };
  return std::vector< std::string >{ temp.begin( ), temp.end( ) };
}


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