Autor
|
Tema: Cómo extraer caracteres en C (Leído 7,332 veces)
|
sora_ori
Desconectado
Mensajes: 269
|
Hola, Estoy haciendo un programa en C y una opción es extraer caracteres comenzando desde la izquierda y otra opción es extraer caracteres comenzando desde la derecha. He podido printar solo los caracteres que se han extraido pero no consigo printar el resultado de la cadena. EXTRAER DESDE LA IZQUIERDA printf("Cuantos caracteres quieres extraer? "); scanf("%d", &extraerIzq ); for (i=0; i<longitud && i<extraerIzq; i++){ printf("\nSe ha extraido: %c", cadena [i ]); }
EXTRAER DESDE LA DERECHAprintf("Cuantos caracteres quieres extraer? "); scanf("%d", &extraerDer ); extraerDer = longitud - (extraerDer > longitud?longitud:extraerDer); for (i = longitud - 1; i >= extraerDer; i--) printf("\nSe ha extraido: %c", cadena [i ]);
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Hola,
........................................... He podido printar solo los caracteres que se han extraido pero no consigo printar el resultado de la cadena.
Das a entender que además de imprimir los caracteres que extraes los quieres guardar en una nueva cadena, cosa que te faltaría.
Por otro lado sería interesante un bucle que asegure que el número de caracteres a extraer sea inferior a la longitud de la cadena original.
Te dejo una muestra por la izquierda. Análogamente sería para la derecha. Aunque yo personalmente soy partidario en este caso de crear una función que recoja ambos casos.
A ver si te sirve de idea:Cuantos caracteres quieres extraer?.Inferior a 9 :12 Cuantos caracteres quieres extraer?.Inferior a 9 :6
Se ha extraido : l Se ha extraido : e Se ha extraido : o Se ha extraido : s Se ha extraido : a Se ha extraido : n Se ha extraido : leosan
#include <stdio.h> int main(void) { int ch,extraer,longitud,i,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 cadenaIzq[extraer+1]; for (i=0; i<extraer; i++){ printf("Se ha extraido : %c\n", cadena[i]); cadenaIzq[i]=cadena[i]; } cadenaIzq[i]='\0'; printf("\nSe ha extraido : %s\n", cadenaIzq); return 0; }
Saluditos! ..... !!!!
|
|
« Última modificación: 13 Diciembre 2013, 16:59 pm por leosansan »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Estoy haciendo un programa en C y una opción es extraer caracteres comenzando desde la izquierda [...] EXTRAER DESDE LA IZQUIERDAprintf("Cuantos caracteres quieres extraer? "); scanf("%d", &extraerIzq ); for (i=0; i<longitud && i<extraerIzq; i++){ printf("\nSe ha extraido: %c", cadena [i ]); }
Para imprimir los primeros caracteres de una cadena no es necesario un bucle, puedes utilizar printf con el especificador "%.*s" donde ".*" indica que el siguiente argumento de la función sera el máximo de caracteres a imprimir. Siguiendo tu ejemplo: printf("Cuantos caracteres quieres extraer? "); if (scanf("%d", &extraerIzq ) == 1 && extraerIzq > 0) printf("%.*s\n", extraerIzq , cadena );
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Gracias por la ayuda, pero "leosansan" el ejemplo que me has puesto era todo lo contrario a lo que quería jeje
A lo que me refería es que me mostrará el resultado de como quedaría una vez con los caracteres extraídos, de todos modos me vendrá bien guardar tu ejemplo porque también me servirá.
Gracias!
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
..................................................................
A lo que me refería es que me mostrará el resultado de como quedaría una vez con los caracteres extraídos, de todos modos me vendrá bien guardar tu ejemplo porque también me servirá.
Sorry, entendí mal.
Aprovecho la aportación de rir3760 y corrijo la cadena final. Creo que sería algo como esto:Cuantos caracteres quieres extraer?.Inferior a 9 :6
Cadena original leosansan
Se ha extraido leosan
Y queda la cadena : san
#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 cadenaIzq[longitud-extraer+1]; for (i=extraer,j=0; i<longitud; i++,j++) cadenaIzq[j]=cadena[i]; cadenaIzq[longitud-extraer]='\0'; printf("\nCadena original %s\n",cadena); printf("\nSe ha extraido %.*s\n", extraer, cadena); printf("\nY queda la cadena : %s\n", cadenaIzq); return 0; }
Saluditos! ..... !!!! REEDITADO.
|
|
« Última modificación: 15 Diciembre 2013, 13:35 pm por leosansan »
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Perfecto, muchas gracias!!! ¿Comenzando a extraer desde la derecha como sería? Perdona las molestias pero es que aún soy novatito en C
|
|
« Última modificación: 15 Diciembre 2013, 09:46 am por sora_ori »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
¿Algo como esto?:Cuantos caracteres quieres extraer?.Inferior a 9 :6
Cadena original leosansan
Se ha extraido:sansan
Y queda la cadena : leo
#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:"); for (i=longitud-extraer; i<longitud; i++) printf("%c", cadena[i]); printf("\n\nY queda la cadena : %s\n", cadenaDcha); return 0; } }
Se puede mejorar creando un array cadenaIzda que guarde el resto de la cadena, ya que como está sólo la imprimo. ¿Te animas?.
Como ves puedes incluir en un sólo código ambos casos. No lo he hecho por pereza xD!. Saluditos! ..... !!!!
|
|
« Última modificación: 15 Diciembre 2013, 14:30 pm por leosansan »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Haced la clase String para C jaja. Al menos haced una réplica de las funciones y operadores básicos xDD
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
¿Te puedes explicar mejor ivancea96?. Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Naada era de coña. Pero más explicado no puede estar xD
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como extraer el Audio a un video y guardarlo como wav o mp3?
« 1 2 »
Multimedia
|
Lainuxxx
|
10
|
309,499
|
24 Diciembre 2006, 01:05 am
por Songoku
|
|
|
Extraer voz de un archivo o extraer la musica solamente !!!!!
Multimedia
|
magnox
|
2
|
3,996
|
28 Septiembre 2004, 17:16 pm
por theloop
|
|
|
Extraer parte del texto, de una cadena de caracteres de un tex box...
Programación Visual Basic
|
angelcont22
|
5
|
12,704
|
4 Abril 2011, 19:03 pm
por 79137913
|
|
|
Extraer 5 primero caracteres
Foro Libre
|
daniel003
|
1
|
1,815
|
10 Agosto 2016, 03:41 am
por engel lex
|
|
|
[VBS] ¿Se pueden extraer caracteres con VBS?
Scripting
|
.:Xx4NG3LxX:.
|
2
|
2,271
|
1 Febrero 2020, 21:57 pm
por .:Xx4NG3LxX:.
|
|