• Viernes 29 de Marzo de 2024, 08:41

Autor Tema:  Contador de caracteres  (Leído 2971 veces)

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Contador de caracteres
« en: Martes 7 de Abril de 2009, 19:10 »
0
Hola amigos tengo el siguiente enunciado:
"ingresar un texto de caracteres utilizando la funcion getchar(). indicar la cantidad de caracteres, palabras y lineas que lo forman. mostar lo pedido con carteles aclaratorios"

si alguien me puede orientar para realizar esto porque no se como empezar.
espero sus respuestas muchar gracias!!

pd: aca les dejo el codigo ke me salio

Código: C
  1.  
  2. # include <stdio.h>
  3.  
  4. main()
  5. {
  6.       int c,contp,contc,contl;
  7.       contp=contc=contl=0;
  8.      
  9.       printf ("Ingrese Palabrasn");
  10.       c=getchar();
  11.       while (putchar(c)!='*')
  12.       {    
  13.             ++contc;
  14.             if (putchar(c)== 'n')
  15.             {
  16.                ++contl;
  17.                ++contp;
  18.                }
  19.       printf ("Ingrese Palabrasn");
  20.       c=getchar();
  21.       }
  22.  
  23. printf("Palabras =n %d",contp);
  24. printf("Lineas =n %d",contl);
  25. printf("Caracteres =n %d",contc);
  26. }
  27.  
  28.  
  29.  
Gracias!

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #1 en: Martes 7 de Abril de 2009, 20:31 »
0
a ver que te parece esto
Código: C
  1. #include <stdio.h>  /* getchar, putchar, EOF */
  2.  
  3.  
  4. int separador (int ch)
  5. {
  6.     return (ch==' ') || (ch=='t') || (ch=='n');
  7. }
  8.  
  9.  
  10. int main ()
  11. {  
  12.   long contador_caracteres;
  13.   long contador_palabras;
  14.   long contador_lineas;
  15.   int  actual;
  16.   int  prev;
  17.  
  18.   // Inicialización de los contadores
  19.  
  20.   contador_caracteres = 0;
  21.   contador_palabras = 0;
  22.   contador_lineas = 1;
  23.  
  24.   // Lectura de los datos de entrada
  25.  
  26.   prev   = ' ';
  27.   actual = getchar();
  28.  
  29.   while (actual != EOF) {
  30.  
  31.       contador_caracteres ++;
  32.  
  33.       // ¿Fin de línea?
  34.  
  35.       if (actual=='n')
  36.           contador_lineas++;
  37.  
  38.       // ¿Comienzo de una nueva palabra?
  39.  
  40.       if (!separador(actual) && separador(prev))
  41.           contador_palabras++;
  42.  
  43.       // Siguiente carácter
  44.  
  45.       prev = actual;
  46.       actual = getchar();
  47.   }
  48.  
  49.   // Resultado
  50.  
  51.   printf("%ld caracteresn", contador_caracteres);
  52.   printf("%ld palabrasn", contador_palabras);
  53.   printf("%ld líneasn", contador_lineas);
  54.  
  55.   return 0;
  56. }
  57.  
  58.  

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #2 en: Martes 7 de Abril de 2009, 20:53 »
0
la verdad que es excelente lo que pusiste, pero hay cosas que no entiendo, soy muy principiante en C.

no entiendo esto:
Código: C
  1. # int separador (int ch)
  2. # {
  3. #     return (ch==' ') || (ch=='t') || (ch=='n');
  4. # }
  5.  

ni tampoco entiendo bien el EOF como fin de datos... como es bien que funciona esto?
tampoco entiendo bien la funcion getchar(): tengo ke ingresar un caracter atras del otro digamos
h
o
l
a

o puedo poner directamente:
hola

estoy medio aturdido jaja  :oops:

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #3 en: Martes 7 de Abril de 2009, 21:07 »
0
lreturn (ch==' ') || (ch=='t') || (ch=='n');

el primer return es un espacio, el segundo es un tabulador, y el tercero es un enter...que es lo que no entiendes?

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #4 en: Martes 7 de Abril de 2009, 22:50 »
0
tu ejemplo es algo "sofisticado" para mi, necesitaria algo mas simple (es que tal vez no existe algo mas simple   :o )
mis dudas son las siguientes:

- No entiendo el EOF. ejecuto el programa y que valor tengo que ingresar por teclado para que termine el programa???. es decir, cuanto vale EOF??. yo uso * como fin de datos
-Tengo dudas existenciales sobre la funcion getchar(). y son: tengo que ingresar caracteres uno a uno por teclado digamos:
H (enter)
O (enter)
L (enter)
A (enter)
* (enter, asterisco es mi fin de datos)

o simplemente ingreso
HOLA* (enter)

segun este mini programa...
Código: C
  1. # include <stdio.h>
  2.  
  3. main ()
  4. {int c;
  5.      long esp,nc;
  6.      
  7.      
  8.      nc=esp=0;
  9.      printf ("Ingrese un caractern");
  10.      //c=getchar();
  11.      while (getchar() != '*')
  12.                 ++nc;
  13.      
  14.      
  15.      
  16.      
  17.      
  18.      printf ("Caracteres=%ld",nc);
  19.  
  20.      
  21. }
  22.      
  23.  

si ingreso los caracteres uno a uno tambien me toman los enters (n) como caracteres, es decir que de ingresar HOLA* me devolveria el valor de 8 caracteres y por alguna razon no me cuenta el * como caracter

si ingreso hola* me devuelve el valor correcto de 4 caracteres , tampoco me cuenta el asterisco.

yo tenia entendido que getchar() era solo para leer solo UN caracter y no una PALABRA entera, estaba equivocado??

esas son mis dudas, son muchas...

pd: recuerdo que utilizo como fin de datos * porque EOF nose como funciona, ejecuto el programa y nunca termina.

elcordoba

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #5 en: Miércoles 8 de Abril de 2009, 04:58 »
0
Te contesto algunas de tus dudas...
La funcion getchar() lee de a un solo caracter, pero debes considerar que se guardan en el buffer todos los caracteres que presiones hasta que aprietes enter. Por lo cual, para tu ejemplo tendrias que ingresar "hola", luego apretar enter y luego control+z (el famoso EOF que no sabias que era).
La funcior separador() la esta utilizando para poder contar palabras(cada vez que se encuentra una letra y el caracter anterior era un separador de palabras, como lo son el espacio ' ', el tabulador 't' y el enter 'n', significa que es una nueva palabra ). Ademas se pueden contar la cantidad de lineas del texto contando la cantidad de enters utilizando esa funcion.
Creo que eso seria suficiente para que entiendas... Cualquier duda pregunta. No hay problema.
Suerte

Hypocrisy

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #6 en: Miércoles 8 de Abril de 2009, 12:21 »
0
jejeje..yo creo k mi programilla es el mas sencillo..al menos para mi. Espero que te haya ayudado la explicacion de elcordoba,sino pregunta otra vez y ya esta ;)

kingsizen

  • Miembro activo
  • **
  • Mensajes: 41
    • Ver Perfil
Re: Contador de caracteres
« Respuesta #7 en: Jueves 9 de Abril de 2009, 05:58 »
0
Clarisimo!. muchas gracias a ambos!