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
/****** 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******/
Comments
No response to “ Reserva dinámica de memoria (2) - Programación C ”
Post a Comment | Enviar comentarios ( Atom )
Publicar un comentario
Deja tu opinión realizando un comentario interesante. Cualquier intento de Spam no será admitido.