Ejercicios y practicas de programación en c resueltos o con solución

El ejercicio planteado es el siguiente:

Prácticas: Analizador de frases.

Se plantea especificar una frase en la cual se pueden encontrar diferentes separadores en la misma. el símbolo “:” dos puntos, serviría para especificar una orden, el símbolo “,” coma permite especificar parámetros separados entre si por dicho símbolo, el símbolo “;” punto y coma permite especificar comentarios y el espacio en blanco se utiliza para separar otro tipo de texto en la frase, el ejercicio ha de visualizar las palabras que conforman la frase separadas según el tipo de separador que tengan.



La solución de los ejercicios que se plantean es la siguiente:

/*

  Nuevos ejercicios de programación con solución propuestos por un lector del
blog www.aprendoencasa.com, en esta ocasión las prácticas resueltas a realizar
consiste ense plantea especificar una frase en la cual se pueden encontrar
diferentes separadores en la misma. el símbolo “:” dos puntos, serviría para
especificar una orden, el símbolo “,” coma permite especificar parámetros
separados entre si por dicho símbolo, el símbolo “;” punto y coma permite
especificar comentarios y el espacio en blanco se utiliza para separar otro
tipo de texto en la frase, el ejercicio ha de visualizar las palabras que
conforman la frase separadas según el tipo de separador que tengan.
Volver a comentar que seguro que existen otros tipos de soluciones a los
ejercicios aquí propuestos y estaré agradecido si queréis realizar algún
tipo de comentario o plantear alguna solución nueva al ejercicio resuelto que
aquí se plantea.

Gracias por visitar www.aprendoencasa.com y www.aprendoencasa.es

*/

// Librerias a utilizar

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(int argc, char *argv[])

{

    // Variables a utilizar

    // Cadena que almacena el texto introducido max 200 caract.

    char Entrada[200];

    // Cadena para almacenar la copia de la cadena con la que se trabaja

    char Copia[200];

    // Cadena para almacenar los comentarios

    char Comentarios[200];

    // Cadena para almacenar las ordenes

    char Ordenes[200];

    // cadena para almacenar parametros

    char Parametros[200];

    // Cadena que almacenara una palabra

    char Palabra[50];

    // Matriz que almacenara hasta 20 palabras

    char Palabras[20][50];

    // Cadena que almacena los separadores de palabras posibles

    char Separadores[10];

    // Guardar posiciones

    int posicion;

    int cuenta1;

    int cuenta2;

    // Puntero que almacena la cadena conforme se separa

    char *Puntero;

    // errores

    int error;

    // Solicitar la cadena

    // Visualizar el mensaje

    printf("Cadena Texto: ");

    // limpiar el buffer de teclado

    rewind(stdin);

    // solicitar la cadena

    gets(Entrada);

    // Copiar la cadena

    strcpy(Copia,Entrada);

    // Saber si existen comentarios y guardarlos

    error = 0;

    Puntero = strstr(Copia,";");

    while(Puntero!=NULL) {

      error++;

      posicion = Puntero-Copia+1;

      Puntero = strstr(Puntero+1,";");

    }

    // saber si hay mas de un comentario o no, si hay mas de uno se

    // considera que hay un error

    if (error!=1) {

       printf("Se han encontrado errores en la entrada ");

       exit;

    } else {

      printf("\nSe han encontrado comentarios en %d\n",posicion);

      printf("Son los siguientes %s",Copia+posicion);

      sprintf(Comentarios,"%s",Copia+posicion);

      printf("\nComentarios Almacenados : %s",Comentarios);

    }

    // Saber si existe un comando en la cadena si hay mas de uno se

    // considera que hay un error

    error = 0;

    Puntero = strstr(Copia,":");

    while(Puntero!=NULL) {

      error++;

      posicion = Puntero-Copia+1;

      Puntero = strstr(Puntero+1,":");

    }

    if (error!=1) {

       printf("Se han encontrado errores en la entrada ");

       exit;

    } else {

      printf("\nSe han encontrado ordenes en %d\n",posicion);

      strncpy(Palabra,Copia,posicion-1);

      Palabra[posicion-1]='
/*
Nuevos ejercicios de programación con solución propuestos por un lector del
blog www.aprendoencasa.com, en esta ocasión las prácticas resueltas a realizar
consiste ense plantea especificar una frase en la cual se pueden encontrar
diferentes separadores en la misma. el símbolo “:” dos puntos, serviría para
especificar una orden, el símbolo “,” coma permite especificar parámetros
separados entre si por dicho símbolo, el símbolo “;” punto y coma permite
especificar comentarios y el espacio en blanco se utiliza para separar otro
tipo de texto en la frase, el ejercicio ha de visualizar las palabras que
conforman la frase separadas según el tipo de separador que tengan.
Volver a comentar que seguro que existen otros tipos de soluciones a los
ejercicios aquí propuestos y estaré agradecido si queréis realizar algún
tipo de comentario o plantear alguna solución nueva al ejercicio resuelto que
aquí se plantea.
Gracias por visitar www.aprendoencasa.com y www.aprendoencasa.es
*/
// Librerias a utilizar
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
// Variables a utilizar
// Cadena que almacena el texto introducido max 200 caract.
char Entrada[200];
// Cadena para almacenar la copia de la cadena con la que se trabaja
char Copia[200];
// Cadena para almacenar los comentarios
char Comentarios[200];
// Cadena para almacenar las ordenes
char Ordenes[200];
// cadena para almacenar parametros
char Parametros[200];
// Cadena que almacenara una palabra
char Palabra[50];
// Matriz que almacenara hasta 20 palabras
char Palabras[20][50];
// Cadena que almacena los separadores de palabras posibles
char Separadores[10];
// Guardar posiciones
int posicion;
int cuenta1;
int cuenta2;
// Puntero que almacena la cadena conforme se separa
char *Puntero;
// errores
int error;
// Solicitar la cadena
// Visualizar el mensaje
printf("Cadena Texto: ");
// limpiar el buffer de teclado
rewind(stdin);
// solicitar la cadena
gets(Entrada);
// Copiar la cadena
strcpy(Copia,Entrada);
// Saber si existen comentarios y guardarlos
error = 0;
Puntero = strstr(Copia,";");
while(Puntero!=NULL) {
error++;
posicion = Puntero-Copia+1;
Puntero = strstr(Puntero+1,";");
}
// saber si hay mas de un comentario o no, si hay mas de uno se
// considera que hay un error
if (error!=1) {
printf("Se han encontrado errores en la entrada ");
exit;
} else {
printf("\nSe han encontrado comentarios en %d\n",posicion);
printf("Son los siguientes %s",Copia+posicion);
sprintf(Comentarios,"%s",Copia+posicion);
printf("\nComentarios Almacenados : %s",Comentarios);
}
// Saber si existe un comando en la cadena si hay mas de uno se
// considera que hay un error
error = 0;
Puntero = strstr(Copia,":");
while(Puntero!=NULL) {
error++;
posicion = Puntero-Copia+1;
Puntero = strstr(Puntero+1,":");
}
if (error!=1) {
printf("Se han encontrado errores en la entrada ");
exit;
} else {
printf("\nSe han encontrado ordenes en %d\n",posicion);
strncpy(Palabra,Copia,posicion-1);
Palabra[posicion-1]='\0';
printf("Son los siguientes %s",Palabra);
sprintf(Ordenes,"%s",Palabra);
printf("\nOrdenes Almacenadas : %s",Ordenes);
}
// buscamos los parametros utilizando otra forma de analizar la cadena
// caracter a caracter
printf("\n--------------------------------\n");
strcpy(Copia,Entrada);
Puntero = strstr(Copia,",");
if (Puntero!=NULL) {
int posi=Puntero-Copia;
while(Copia[posi]!=' ') posi--;
posi++;
while(Copia[posi]!=' ') {
if(Copia[posi]!=',') {
printf("%c",Copia[posi]);
} else {
printf(" ");
}
posi++;
}
}
printf("\n--------------------------------\n");
printf("\n************************\n");
// Establecer los separadores de palabras posibles, el separador
// punto y coma se trata a parte ya que se considera que a partir del
// mismo en adelante en la cadena todo es un comentario
strcpy(Separadores,";");
// Realizar la separacion del primer token utilizando el punto y coma
// de esta forma se consigue separar el texto valido de lo que son
// comentarios en la cadena de texto
Puntero = strtok( Copia, Separadores );    // Primera llamada => Primer token
// Visualizar la cadena modificada
strcpy(Separadores," ");
Puntero = strtok( Copia, Separadores );    // Primera llamada => Primer token
sprintf(Parametros,"%s",Puntero);
if (strstr(Parametros,":")==NULL && strstr(Parametros,";")==NULL && strstr(Parametros,",")==NULL)
printf("\n%s",Parametros);
while( (Puntero = strtok( NULL, Separadores )) != NULL ) {
sprintf(Parametros,"%s",Puntero);
if (strstr(Parametros,":")==NULL && strstr(Parametros,";")==NULL && strstr(Parametros,",")==NULL)
printf("\n%s",Parametros);
}    // Posteriores llamadas
printf("\n************************\n");
// www.aprendoencasa.com
// www.aprendoencasa.es
system("PAUSE");
return 0;
}
'; printf("Son los siguientes %s",Palabra); sprintf(Ordenes,"%s",Palabra); printf("\nOrdenes Almacenadas : %s",Ordenes); } // buscamos los parametros utilizando otra forma de analizar la cadena // caracter a caracter printf("\n--------------------------------\n"); strcpy(Copia,Entrada); Puntero = strstr(Copia,","); if (Puntero!=NULL) { int posi=Puntero-Copia; while(Copia[posi]!=' ') posi--; posi++; while(Copia[posi]!=' ') { if(Copia[posi]!=',') { printf("%c",Copia[posi]); } else { printf(" "); } posi++; } } printf("\n--------------------------------\n"); printf("\n************************\n"); // Establecer los separadores de palabras posibles, el separador // punto y coma se trata a parte ya que se considera que a partir del // mismo en adelante en la cadena todo es un comentario strcpy(Separadores,";"); // Realizar la separacion del primer token utilizando el punto y coma // de esta forma se consigue separar el texto valido de lo que son // comentarios en la cadena de texto Puntero = strtok( Copia, Separadores ); // Primera llamada => Primer token // Visualizar la cadena modificada strcpy(Separadores," "); Puntero = strtok( Copia, Separadores ); // Primera llamada => Primer token sprintf(Parametros,"%s",Puntero); if (strstr(Parametros,":")==NULL && strstr(Parametros,";")==NULL && strstr(Parametros,",")==NULL) printf("\n%s",Parametros); while( (Puntero = strtok( NULL, Separadores )) != NULL ) { sprintf(Parametros,"%s",Puntero); if (strstr(Parametros,":")==NULL && strstr(Parametros,";")==NULL && strstr(Parametros,",")==NULL) printf("\n%s",Parametros); } // Posteriores llamadas printf("\n************************\n"); // www.aprendoencasa.com // www.aprendoencasa.es system("PAUSE"); return 0; }

El resultado del ejercicio ha de ser similar al que se muestra a continuación.

Ejercicios en C, analizador de frases.

Ejercicios en C, analizador de frases.

Gracias por vuestra visita y un saludo!!!