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

Contar número de palabras recursivamente [C]

Estas en el tema de Contar número de palabras recursivamente [C] en el foro de C/C++ en Foros del Web. Hola, a la función NumPalabras de este código se le pasa como argumento una cadena, y devuelve el número de palabras que hay en ella, ...
  #1 (permalink)  
Antiguo 14/03/2010, 15:49
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Contar número de palabras recursivamente [C]

Hola, a la función NumPalabras de este código se le pasa como argumento una cadena, y devuelve el número de palabras que hay en ella, simplemente contando los espacios en blanco que hay.
Estoy intentando que esta función sea recursiva, pero no he podido hacerlo, no me sale. ¿alguna idea?

Gracias de antemano!

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.  
  8. int cont;
  9.  
  10.   char cadena[80];
  11.  
  12.   printf("Escribir Oracion: ");
  13.   gets(cadena);
  14.  
  15.  
  16.   printf("\n\nHay %d Palabras \n\n", NumPalabras(cadena));
  17.  
  18.   system("PAUSE"); 
  19.   return 0;
  20. }
  21.  
  22.  
  23.  
  24. int NumPalabras(char *cadena) {
  25.     int cont=1;
  26.     char *pch;
  27.  
  28.  
  29.     pch=strchr(cadena,' ');//encuentra la primera coincidencia
  30.  
  31.  
  32.   while (pch!=NULL) //incrementa el contador hasta que la funcion devuelva NULL
  33.   {
  34.     pch=strchr(pch+1,' ');
  35.     cont++;
  36.   }
  37.  
  38.     return cont;
  39. }
  #2 (permalink)  
Antiguo 15/03/2010, 07:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Contar número de palabras recursivamente [C]

Cita:
Iniciado por Godiecar Ver Mensaje
Hola, a la función NumPalabras de este código se le pasa como argumento una cadena, y devuelve el número de palabras que hay en ella, simplemente contando los espacios en blanco que hay.
Estoy intentando que esta función sea recursiva, pero no he podido hacerlo, no me sale. ¿alguna idea?

Gracias de antemano!

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.  
  8. int cont;
  9.  
  10.   char cadena[80];
  11.  
  12.   printf("Escribir Oracion: ");
  13.   gets(cadena);
  14.  
  15.  
  16.   printf("\n\nHay %d Palabras \n\n", NumPalabras(cadena));
  17.  
  18.   system("PAUSE"); 
  19.   return 0;
  20. }
  21.  
  22.  
  23.  
  24. int NumPalabras(char *cadena) {
  25.     int cont=1;
  26.     char *pch;
  27.  
  28.  
  29.     pch=strchr(cadena,' ');//encuentra la primera coincidencia
  30.  
  31.  
  32.   while (pch!=NULL) //incrementa el contador hasta que la funcion devuelva NULL
  33.   {
  34.     pch=strchr(pch+1,' ');
  35.     cont++;
  36.   }
  37.  
  38.     return cont;
  39. }
Primero decirte que la funcion que has escrito para nada es recursiva, segundo realmente necesitas que sea recursiva?, pregunto eso porque podrías hacer la funcion "sencilla" contando palabras usando strtok.

Saludos.
  #3 (permalink)  
Antiguo 15/03/2010, 11:44
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Contar número de palabras recursivamente [C]

Cita:
Iniciado por Godiecar Ver Mensaje
Hola, a la función NumPalabras de este código se le pasa como argumento una cadena, y devuelve el número de palabras que hay en ella, simplemente contando los espacios en blanco que hay.
En un caso "maldito", si alguien escribiera
Código C:
Ver original
  1. "un    texto        con       muchos          espacios     entre           medio"

tendrias muchos mas espacios que palabras.

Tambien hay que considerar espacios adelante o atras.

Parece mejor una maquina de 2 estados (fuera o dentro de una palabra), en donde cada vez que entras a una palabras cuentas y cada vez que sales vuelves a estar listo para contar otra vez.
  #4 (permalink)  
Antiguo 15/03/2010, 16:52
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Contar número de palabras recursivamente [C]

djrony:

- Si, efectivamente, la función que publique no es recursiva, es iterativa, la publique así porque no se me ocurría hacerla recursiva.

- Si, era necesario que fuera recursiva.

- Desconocía la función strtok, llevo poco tiempo aprendiendo a programar y la función strchr fue lo único que encontré para poder hacer este código, aun así gracias por el dato.

CalgaryCorpus:

- En principio no me preocupaba el hecho de que contara los espacios en blanco como palabras, solo me centraba en la recursividad.



Alguien me ha ayudado con el código y parece que funciona.

Saludos.


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.  
  7. int cont;
  8.  
  9.   char cadena[80];
  10.  
  11.   printf("Escribir Oracion: ");
  12.   gets(cadena);
  13.  
  14.  
  15.   printf("\n\nHay %d Palabras \n\n", NumPalabras(cadena));
  16.  
  17.  
  18.   system("PAUSE"); 
  19.   return 0;
  20. }
  21.  
  22.  
  23.  
  24.  
  25. int NumPalabras(char* cadena)
  26. {
  27.        static int cont = 1;
  28.        if(*cadena == '\0') return 0;
  29.        if(*cadena == ' ') cont = 1;
  30.        if(*cadena != ' ' && cont == 1){
  31.            cont = 0;
  32.            return 1 + NumPalabras((++cadena));}
  33.        else  return 0 + NumPalabras((++cadena));  
  34. }

Etiquetas: contar, palabras
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 21:48.