Cómo extraer caracteres en C

Iniciado por sora_ori, 13 Diciembre 2013, 13:07 PM

0 Miembros y 1 Visitante están viendo este tema.

leosansan

#10
Cita de: ivancea96 en 15 Diciembre 2013, 15:02 PM
Naada era de coña. Pero más explicado no puede estar xD

Sorry, "toy" sencible, pero ahora lo pillo, tipo C++. ;-)

Aprovecho para postear el código con las dos operaciones a la vez:

Código (cpp) [Seleccionar]

#include <stdio.h>

int  main(void)
{
   int ch,extraer,longitud,i,j,flag;
   char cadena[]="leosansan";
   for (i=0;cadena[i] ;i++);
   longitud=i;
   do {
       printf("Cuantos caracteres quieres extraer?.Inferior a %d :",longitud);
       fflush(stdout);
       flag=(scanf("%d", &extraer));
       while( (ch = getchar()) != '\n' );
   }while (extraer > longitud ||flag==0);
   char cadenaDcha[longitud-extraer+1];
   for (i=0,j=0; i<longitud-extraer; i++,j++)
       cadenaDcha[j]=cadena[i];
   cadenaDcha[j]='\0';
   printf("\nCadena original:  %s\n",cadena);
   printf("\nSe ha extraido por la derecha: ");
   fflush(stdout);
   for (i=longitud-extraer; i<longitud; i++)
       printf("%c", cadena[i]);
       printf("\n\nY queda la cadena: %s\n", cadenaDcha);

   char cadenaIzq[longitud-extraer+1];
   for (i=extraer,j=0; i<longitud; i++,j++)
       cadenaIzq[j]=cadena[i];
   cadenaIzq[j]='\0';
   printf("\nSe ha extraido por la izquierda: %.*s\n", extraer, cadena);
   printf("\nY queda la cadena: %s\n", cadenaIzq);
   return 0;
}


Pero mejor es el que sigue, ya que guarda en arrays los restos de las cadenas:

Código (cpp) [Seleccionar]


#include <stdio.h>

int  main(void)
{
   int ch,extraer,longitud,i,j,flag;
   char cadena[]="leosansan";
   for (i=0;cadena[i] ;i++);
   longitud=i;
   do {
       printf("Cuantos caracteres quieres extraer?.Inferior a %d :",longitud);
       fflush(stdout);
       flag=(scanf("%d", &extraer));
       while( (ch = getchar()) != '\n' );
   }while (extraer > longitud ||flag==0);

   char cadenaDcha[longitud-extraer+1],cadenaIzq[longitud-extraer+1],cadenaDcha_resto[extraer],cadenaIzqda_resto[extraer];
   printf("\nCadena original:  %s\n",cadena);

   for (i=0,j=0; i<longitud-extraer; i++,j++)
       cadenaDcha[j]=cadena[i];
   cadenaDcha[j]='\0';
   for (i=longitud-extraer,j=0; i<longitud; i++,j++)
       cadenaDcha_resto[j]=cadena[i];
   cadenaDcha_resto[j]='\0';
   printf("\nSe ha extraido por la derecha: %s\n",cadenaDcha_resto);
   printf("\nY queda la cadena: %s\n", cadenaDcha);

   for (i=extraer,j=0; i<longitud; i++,j++)
       cadenaIzq[j]=cadena[i];
   cadenaIzq[j]='\0';
   for (i=0,j=0; i<extraer; i++,j++)
       cadenaIzqda_resto[j]=cadena[i];
   cadenaIzqda_resto[j]='\0';
   printf("\nSe ha extraido por la izquierda: %s\n", cadenaIzqda_resto);
   printf("\nY queda la cadena: %s\n", cadenaIzq);
   return 0;
}


Ya sólo queda hacerlo mediante una función que sirva tanto para la izquierda como para la derecha aprovechando que esas partes del código son cuasi-iguales.

Saluditos! ..... !!!!        

leosansan

#11
Perdonen que postee nuevamente, pero el aporte quedo pendiente y por ser tan diferente lo hago así.

Esta vez construyo una función a la que invoco para extraer tanto por la derecha como por la izquierda:


Código (cpp) [Seleccionar]
#include <stdio.h>

void extraer_y_resto (char *Cadena_lado, char *Cadena,char *Cadena_resto,int a, int b,int c, int d);
void imprimir(char *msg,char *Cadena_resto,char *Cadena_lado);

int  main(void)
{
   int ch,extraer,longitud,i,j,flag;
   char cadena[]="leosansan";
   for (i=0;cadena[i] ;i++);
   longitud=i;
   do {
       printf("Cuantos caracteres quieres extraer?.Inferior a %d :",longitud);
       fflush(stdout);
       flag=(scanf("%d", &extraer));
       while( (ch = getchar()) != '\n' );
   }while (extraer > longitud ||flag==0);
   char cadena_Lado[longitud-extraer+1],cadena_resto[extraer];
   printf("\nCadena original:  %s\n",cadena);
   extraer_y_resto (cadena_Lado, cadena,cadena_resto,0,longitud-extraer ,longitud-extraer, longitud);
   imprimir ("derecha",cadena_resto,cadena_Lado);
   extraer_y_resto (cadena_Lado,cadena, cadena_resto, extraer, longitud, 0,extraer);
   imprimir ("izquierda",cadena_resto,cadena_Lado);
   return 0;
}

void extraer_y_resto (char *Cadena_lado, char *Cadena,char *Cadena_resto,int a, int b,int c, int d)
{
   int i,j;
   for (i=a,j=0; i<b; i++,j++)
       Cadena_lado[j]=Cadena[i];
   Cadena_lado[j]='\0';
   for (i=c,j=0; i<d; i++,j++)
       Cadena_resto[j]=Cadena[i];
   Cadena_resto[j]='\0';
}
void imprimir(char *msg,char *Cadena_resto,char *Cadena_lado)
{
   printf("\nSe ha extraido por la %s: %s\n",msg,Cadena_resto);
   printf("\nY queda la cadena: %s\n", Cadena_lado);
}


Saluditos! ..... !!!!