Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: welms28 en 7 Febrero 2014, 17:35 pm



Título: ¿Como crear un Array de Array's en C++?
Publicado por: welms28 en 7 Febrero 2014, 17:35 pm
Buenas tardes,

Estoy haciendo una practica de c++ para la universidad y en esta practica no nos dejan utilizar la clase String (menuda tontería ¿no?). En la practica se trabaja con palabras. Mi problema es:

Estoy haciendo un programa, que como resumen trata de que el usuario introduce una palabra y yo tengo que mirar si ya se ha introducido anteriormente. Lo he hecho con ficheros, pero resulta que tampoco nos dejan hacerlo con ficheros, solo con array's. Lo que debo crear es una especie de Historial.

Gracias


Título: Re: ¿Como crear un Array de Array's en C++?
Publicado por: rir3760 en 7 Febrero 2014, 18:17 pm
Si hay un limite en el máximo de palabras del historial y este es relativamente pequeño basta con declarar un array de arrays de caracteres:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <cstring>
  7. using std::strcmp;
  8. using std::strcpy;
  9.  
  10. const int max_palabras = 4;
  11. const int chars_x_palabra = 32;
  12.  
  13. int main()
  14. {
  15.   char palabra[max_palabras][chars_x_palabra];
  16.   char aux[chars_x_palabra];
  17.   int num_palabras = 0;
  18.  
  19.   for (int i = 0; i != max_palabras; ++i){
  20.      cout << "Introduce una palabra: ";
  21.      cin >> aux;
  22.  
  23.      int j;
  24.      for (j = 0; j != num_palabras && strcmp(aux, palabra[j]); ++j)
  25.         ;
  26.      if (j == num_palabras)
  27.         strcpy(palabra[num_palabras++], aux);
  28.      else
  29.         cout << "Palabra repetida" << endl;
  30.   }
  31.  
  32.   for (int i = 0; i != num_palabras; ++i)
  33.      cout << "Palabra " << (i + 1) << ": " << palabra[i] << endl;
  34.  
  35.   return 0;
  36. }

Pero si debes aceptar un numero arbitrario de palabras lo mejor es utilizar un puntero de tipo "char **" junto con las funciones malloc, calloc y realloc.

Un detalle que debe cambiarse si o si en el programa es el uso de cin por una forma segura de leer una palabra evitando el desbordamiento.

Ya por ultimo yo no lo haría de esa forma, si estas aprendiendo C++ lo políticamente correcto es utilizar vector + string + getline y así terminas con un programa mas corto y seguro.

Un saludo