martes, 4 de enero de 2011

Kernighan_Ritchie_1.8 (Conteo de Tabuladores, Espacios en Blanco y Nuevas Líneas en C)

_______________________________________________________________________________
1.8 Escriba un programa que cuente espacios en blanco, tabuladores y nuevas líneas.
_______________________________________________________________________________
Solución:
_______________________________________________________________________________
A continuación se presenta el código.

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *                                                                     *
 *   ESTE PROGRAMA RECIBE UNA CADENA DE CARACTERES Y CUENTA EL NUMERO  *
 *   DE ESPACIOS EN BLANCO, TABULADORES Y NUEVAS LINEAS.               *
 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *                                                                     *
 *                          ALGORITMO:                                 *
 * Recibir el siguiente caracter mientras este sea distinto a EOF      *
 *                                                                     *
 * Si el caracter es espacio en blanco, incrementa el contador  de     *
 * espacios en blanco                                                  *
 * Si el caracter es tabulador, incrementa el contador de tabuladores  *
 * Si el caracter es salto de línea, incrementa el contador de nuevas  *
 * líneas.                                                             *
 *                                                                     *
 * Imrpime el numero de espacios en blanco                             *
 * Imprime el numero de tabuladores                                    *
 * Imprime el numero de saltos de linea.                               *
 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#include <stdio.h>

/*//////////////////////////////////////////////////////////////////
// MAIN
//////////////////////////////////////////////////////////////////*/

int main()

{           /* Abre main */
printf("\nEste programa cuenta el numero de espacios en blanco,");
printf("tabuladores y nuevas lineas.");

int c;
int contador_blanco = 0;
int contador_tabulador = 0;
int contador_nueva = 0;

printf("\nIntroduzca cadena, ( EOF para terminar )");
  
while( (c = getchar()) != EOF )
{            /* Abre while */
/* Descomentar para ver el numero correspondiente al caracter
   printf("\nEl caracter que introdujo es: %d", c); */
   
if (' ' == c)
{
contador_blanco++;
}

if ('\t' == c)
{
contador_tabulador++;
}

if ('\n' == c)
{
contador_nueva++;
}
  
}               /* Cierra while */

printf("\nEl numero de espacios en blanco es: %d", contador_blanco);
printf("\nEl numero de tabuladores es: %d", contador_tabulador);
printf("\nEl numero de caracteres de nueva linea es: %d", contador_nueva);
printf("\n\n");

} /* Cierra main */

______________________________________________________________________________
Un par de comentarios al principio dicen qué hace este programa y cuáles son los pasos que realiza para hacerlo.
La parte fundamental de este programa es esta:


while( (c = getchar()) != EOF )
{            /* Abre while */
/* Descomentar para ver el numero correspondiente al caracter
   printf("\nEl caracter que introdujo es: %d", c); */
   
if (' ' == c)
{
contador_blanco++;
}

if ('\t' == c)
{
contador_tabulador++;
}

if ('\n' == c)
{
contador_nueva++;
}
  
}               /* Cierra while */         

Tal vez lo más difícil de entender sea la condición en while. Primero se recibe el caracter siguiente con getchar() y se asigna a la variable entera c. C es variable entera porque debe ser capaz de almacenar EOF. A continuación, el valor de c se compara con EOF, si los valores son distintos, entonces se realiza el cuerpo de while.
Y ese cuerpo es muy simple. Si el carácter es ' ', se incrementa el contador de espacios blancos.
Si el carácter es '\t', entonces se incrementa el contador de tabuladores.
Si el carácter es '\n', entonces se incrementa el contador de siguientes líneas.
_______________________________________________________________________________
Esta entrada es parte de los problemas resueltos del libro El Lenguaje de Programación C, de B. Kernighan y D. Ritchie.
Entrada Anterior
Entrada Siguiente

7 comentarios:

  1. Que buenos programas , gracias espero que sigan apoyando a los nuevos !!

    ResponderEliminar
    Respuestas
    1. Qué bueno saber que te están sirviendo. Subiré más de éstos. Gracias.

      Eliminar
  2. hola amigo en serio que gran aporte thx. Solo una duda en el capitulo 1.5.2 conteo de caracteres el ejmpelo no me corre, o no entiendo que es lo q termina el ciclo while para que imprima por que no imprime nada. Puedes ayudarme?
    #include

    int main()
    {
    long nc;
    nc=0;

    while (getchar()!=EOF)
    ++nc;
    printf("%ld\n",nc);
    }

    ResponderEliminar
    Respuestas
    1. Gracias por los comentarios, Rafael. Lo que pasa con éste programa es que cuando lo ejecutas, se queda esperando que ingreses los caracteres. Cuando se queda la pantalla esperando puedes escribir cualquier cosa y para terminar Ctr+ + D (ésto es el caracter de fin de archivo en Unix, en Windows debería servir Ctrl + Z). También puedes meterle un archivo de texto cualquiera y te devuelve el número de caracteres.
      Muchos saludos y espero te sirva. Si tienes otra duda, me dices.

      Eliminar
    2. Gracias de hecho el problema era ese no estaba introduciendo el valor de EOF que en windows es "contrl + z" al ya poner este valor ya termina la iteracion del while y ya imprime el resultado thx again

      Eliminar
  3. Gracias por compartir tu conocimiento!

    ResponderEliminar
  4. Hola, estoy ejecutando el programa en la consola de ubuntu 18.04, pero no logro imprimir en pantalla los resultados.

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...