Reserva dinámica de memoria (2) - Programación C

lunes, 6 de diciembre de 2010

Hoy volvemos con más ejercicios de programación en C y continuamos con ejercicios de reserva dinámica de memoria. En esta ocasión tendremos que realizar una aplicación que realiza diferentes operaciones y en ellas tendremos que tener en cuenta la reserva dinámica de memoria.

Ejercicio:
Crear un programa que pida una cadena de caracteres, la guarde en memoria y muestre un menú con diferentes opciones:
  • i) Mostrar por pantalla la cadena actual
  • k) Sumarle una cadena de caracteres a la actual (concatenar)
  • e) Eliminar una cadena de caracteres que tenga la cadena actual
  • z) Eliminar toda la cadena a partir de un carácter
  • M) Convertir toda la cadena a mayúsculas
  • m) Convertir toda la cadena a minúsculas
 Para ver el resultado, continúa leyendo.



/******   Inicio programa ******/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>


char * Lectura();

char Menu();

void Maiuskulatara(char *str1);

void Minuskulatara(char *str1);

char * Konkatenatu(char *str1, char *str2);

char * Moztu(char *str1, char kar);

char *Ezabatu (char *str1, char *str2);



main()

{
      char *st1,*st2,str1[1],karak,auk;

      st1=Lectura();

      do

      {
          auk=Menu();

          switch (auk)

          {

                 case 'i': {

                           printf("%s",st1);

                           }break;


                 case 'k': {

                           st2=Lectura();

                           st1=Konkatenatu(st1,st2);

                           free(st2);

                           }break;

                 case 'e': {

                           printf("Mete la cadena de caracteres que deseas eliminar:\n");

                           st2=Lectura();

                           strcpy(st1,Ezabatu(st1,st2));

                           free(st2);

                           printf("Cadena modificada\n");

                           }break;


                 case 'z': {

                            printf("Mete el caracter: ");

                            gets(str1);

                            sscanf(str1,"%c",&karak);

                            st1=Moztu(st1,karak);

                            }break;


                 case 'M': Maiuskulatara(st1);break;

                 case 'm': Minuskulatara(st1);break;

                 case '0': printf("Saliendo del programa");break;

                 default: printf("Mete una opcion correcta");break;

           }

       }

       while (auk!='0');

       free(st1);

       getchar();

}

char * Lectura()

{

     char texto[100],*ptr;

     printf("Mete una cadena de texto: ");

     gets(texto);

     ptr=strdup(texto);

     return (ptr);

}

char Menu()

{

     char auke,str[1];

     printf("Mete la opcion que desees: \n \n");

     printf("i) Escribir en pantalla la cadena de texto\n");

     printf("k) Sumarle una cadena de texto (concatenar)\n");

     printf("e) Eliminar una parte de la cadena de texto\n");

     printf("z) recortar a partir de un caracter\n");

     printf("M) Pasar a mayusculas\n");

     printf("m) Pasar a minusculas\n");

     printf("0) Salir del programa\n");

     gets(str);

     sscanf(str,"%c",&auke);

     return (auke);

}

char * Konkatenatu(char *str1, char *str2)

{

     strcat(str1,str2);

     return (str1);

}

char * Moztu(char *str1, char kar)

{

     char *kat,*ptr,erren[1];

     erren[0]=kar;

     kat=strtok(str1,erren);

     ptr=strdup(kat);

     return (ptr);

}

void Maiuskulatara(char *str1)

{

     int luz,i;

     luz=strlen(str1);

     for(i=0;i<=luz;i++)

     {
        if (islower(str1[i]))

           str1[i]=toupper(str1[i]);
     }
}


void Minuskulatara(char *str1)

{

     int luz,i;

     luz=strlen(str1);

     for(i=0;i<=luz;i++)

     {

        if (isupper(str1[i]))

           str1[i]=tolower(str1[i]);
     }
}

char *Ezabatu (char *str1, char *str2)

{

int j,finala,k,tmp1,tmp2,errepi=0,luz1,luz2;

luz1=strlen(str1);

luz2=strlen(str2);

for (j=0;(j<=luz1)&&(errepi==0);j++)

  {

      finala=0;

      if (str2[0]==str1[j])

      {

       k=0;

       tmp2=0;

       tmp1=j;

       while ((str2[tmp2]==str1[tmp1])&&(finala==0))

       {

           k++;

           tmp1++;

           tmp2++;

           if (k==luz2)

             {

             finala=1;

             errepi=1;

             }

        }

       }

   }

if (errepi==1)

  for (j=tmp1;j<=luz1;j++)

    str1[j-luz2]=str1[j];

str1=strdup(str1);

return str1;

}

/******   Fin programa******/

Artículos relacionados


Comments

No response to “ Reserva dinámica de memoria (2) - Programación C ”
Post a Comment | Enviar comentarios ( Atom )

Publicar un comentario en la entrada

Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.