1.23Escriba un programa para eliminar todos los comentarios de un programa en C. No olvide manejar apropiadamente las cadenas entre comillas y las constantes de carácter. Los comentarios en C no se anidan.
_____________________________________________________________________________________
Solución: Este programa sólo elimina los comentarios tipo C: los que empiezan con /* y terminan con */ Para hacerlo es necesario tener en cuenta que en cualquier momento se está o bien dentro o fuera de un comentario. A partir de saber cuál es la situación, hay que proceder con las acciones correspondientes.
#include<stdio.h> int main() { /*Abre main *//*Comentario*/ int Estatus = 0; /*La variable estatus indica si se esta dentro (1) o fuera (0) de un comentario. Se inicia fuera */ int c; /*La variable c guardara los caracteres recibidos*/ /*Este ciclo while recibe los caracteres*/ while( (c = getchar()) != EOF ) { /*Abre while */ /*OPCION 1: FUERA DE UN COMENTARIO*/ if (0 == Estatus) { /*Abre if Estatus == 0*/ if ( c != '/') putchar(c); else { /*Abre else*/ c = getchar(); if ( '*' == c ) Estatus = 1; else {/*Abre else anidado*/ printf("/"); putchar(c); } /*Cierra else anidado*/ } /*Cierra else*/ } /*Cierra if Estatus == 0*/ /*OPCION 2: DENTRO DE UN COMENTARIO*/ if (1 == Estatus) { /*Abre if Estatus == 1*/ if ( '*' == c) if ((c = getchar()) == '/') Estatus = 0; } /*Cierra if Estatus = 1*/ } /*Cierra while*/ return 0; } /*Cierra main*/
Aplicado a este código, la salida es:
#include<stdio.h> int main() { int Estatus = 0; int c; while( (c = getchar()) != EOF ) { if (0 == Estatus) { if ( c != '/') putchar(c); else { c = getchar(); if ( '*' == c ) Estatus = 1; else { printf("/"); putchar(c); } } } if (1 == Estatus) { if ( '*' == c) if ((c = getchar()) == '/') Estatus = 0; } } return 0; }
No hay comentarios:
Publicar un comentario