Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿vector de strings?

Estas en el tema de ¿vector de strings? en el foro de C/C++ en Foros del Web. Hola, estoy intentando hacer algo, pero no se me ocurre. Leo de un fichero que contiene palabras separadas por espacios. Necesito leer N palabras y ...
  #1 (permalink)  
Antiguo 23/12/2008, 17:29
 
Fecha de Ingreso: octubre-2008
Mensajes: 30
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta ¿vector de strings?

Hola, estoy intentando hacer algo, pero no se me ocurre.
Leo de un fichero que contiene palabras separadas por espacios. Necesito leer N palabras y meter esas N en un vector de strings, para luego llamar a una función Hash y luego quitar la primera palabra, mover el resto de las palabras una posicion a la izquierda, añadir la siguiente palabra al final y volver a llamar a la funcion Hash.

Lo he intentado de muchas formas y no me sale

Hasta el momento no consigo leer de N en N palabras. Me falla y no se como arreglarlo:

Código:
void pasar_a_hash (char *fich, unsigned int conjuntos) {
   FILE *temp;
   char *vector_palabras[N];
   char *buffer;
   unsigned int i, j;

   temp = fopen (fich, "r");
   for (j = 0; j < N; j++) { /* Ponemos las primeras N palabras en el vector */
     fscanf (temp, "%s", buffer);
     vector_palabras[j] = buffer;
     printf ("%s ", vector_palabras[j]);  /*<------- Esto me lo muestra bien */
   }
   for (j = 0; j < N; j++)
     printf ("%s ", vector_palabras[j]);  /*<------- Esto me lo muestra MAL */
   printf ("\n");
   i = 1;
   while (i < conjuntos) { /* Hasta el numero de conjuntos - 1 */
     /* LLAMAR A FUNCION HASH AQUI */
     for (j = 0; j < N - 1; j++) /* Movemos las palabras de sitio */
       vector_palabras[j] = vector_palabras[j + 1];
     fscanf (temp, "%s", vector_palabras[N - 1]);
     printf ("\n%s\n", vector_palabras[N - 1]); /*<---- Este lo muestra bien*/
     i++;
     for (j = 0; j < N; j++)
        printf ("%s ", vector_palabras[j]); /*<--- Este lo muestra MAL*/
   }
  fclose (temp);
}
gracias!!
  #2 (permalink)  
Antiguo 23/12/2008, 17:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 30
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: ¿vector de strings?

Cuando digo que me lo muestra mal, me refiero a que me muestra la última palabra repetida todo el rato.
  #3 (permalink)  
Antiguo 24/12/2008, 06:01
poi
 
Fecha de Ingreso: octubre-2008
Mensajes: 73
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: ¿vector de strings?

Cambia el bucle que tienes para leer, el for no controla si llegas al final del fichero, entonces guarda todo el rato la ultima palabra que has leido.
Cambia el for por un while. Ademas te falta comprobar que el fichero se haya abierto correctamente.

la estructura para ller de un fichero es la siguiente.

lees del fichero
while( no sea el final del fichero && contador < N)
{

guardas en el vector lo leido;
lees del fichero;

}

Esque C no lo controlo.
  #4 (permalink)  
Antiguo 24/12/2008, 08:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 30
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: ¿vector de strings?

He cambiado el codigo como dijiste, aunque lo del final de fichero ya lo tenía controlado con las variables, pero bueno, por si acaso, pero no .. sigue igual, es decir, me sigue mostrando la ultima palabra todo todo el rato en vector_palabras[j]:

Código:
  do {
    final_de_fichero = fscanf (temp, "%s", buffer);
    if (final_de_fichero != EOF) {
      printf ("::%s::", buffer);
      vector_palabras[j] = buffer;
    }
    printf(" .%s. ", vector_palabras[j]); /*<-- muestra BIEN - cada palabra */
    j++;
  } while ((final_de_fichero != EOF) && (j < N));
  printf ("\n");
  for (j = 0; j < N; j++)
    printf(" .%s. ", vector_palabras[j]); /*<-- muestra MAL - la ultima siempre*/
  printf ("\n");
  #5 (permalink)  
Antiguo 24/12/2008, 09:33
 
Fecha de Ingreso: octubre-2008
Mensajes: 30
Antigüedad: 15 años, 6 meses
Puntos: 0
De acuerdo Respuesta: ¿vector de strings? Solucionado!

Al final un amigo me ha arreglado el problema. El código que fallaba quedaría así .. por si a alguien le puede ser útil.

Código:
  
buffer = (char *) malloc(sizeof(char)*255);
  for (j=0;j<N;j++)
    vector_palabras[j]=(char*)malloc(sizeof(char)*255);
  j = 0;
  do {
    final_de_fichero = fscanf (temp, "%s", buffer);
    if (final_de_fichero != EOF)
      strcpy(vector_palabras[j],buffer);
    j++;
  } while ((final_de_fichero != EOF) && (j < N));
  printf ("\n");
  for (j = 0; j < N; j++)
    printf(" -%s- ", vector_palabras[j]);
  printf ("\n");
Damos esto por solucionado entonces?
Gracias a todos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:37.