Programación General > C/C++
Copiado, capturar, cadenas dinamicas.
(1/1)
portirijillo:
Saludos a todos, ahora me encuentro en un lio, tratando de hacer de forma dinamica el uso de cadenas. Ya que dada 2 o mas cadenas desde la linea de comandos, ocupo hacer cosas como copiar, concatenar o volver a capturar la cadena dentro del programa.
La forma de introducir la cadena despues de la compilacion es
C:\>programa.exe cadena1 cadena2
ejemplo que he estado testeando
C:\>programa.exe ana fantasia
El codigo es el siguiente:
--- Código: C ---#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h> void copia(char *, char*);char tamano(char *);void capturar(char *); int main(int argc, char **argv) { /*Primer elemento es el origne, el segundo el destino*/ copia(argv[2],argv[1]); printf("\nOrigen : %s",argv[2]); printf("\nDestino : %s",argv[1]); capturar(argv[1]); printf("\nOrigen : %s",argv[2]); printf("\nDestino capturado : %s",argv[1]); return 0;} void capturar(char *cadena){ char *tmp; printf("\nInserte la cadena : "); gets(cadena); fflush(stdin); printf("%s",cadena);} void copia(char *origen, char *destino) { int i=0; while(origen[i]){ destino[i]=origen[i]; i++; } if(tamano(destino)>tamano(origen)) while(destino[i]) { destino[i]=0; i++; }} char tamano(char *palabra) { int i=0; while(palabra[i]) i++; return i;}
Primero presento problemas al cocatenar las cadenas, por lo que me puse a revisar las direcciones en que se estan guardando, al parecer estan consecuivas, bueno deje la funcion de concatenar pendiente. Pero por ahora ocupo de su ayuda para la copia y capturacion nueva.
Es decir, si yo puse "C:\>programa ana fantasia" el programa debe ser capaz de pasar la palabra1 (ana) copiarla a la palabra2(fantasia). Imprimiendo
p1: ana
p2: ana
Pero tambien debe podre pasar al palabra2(fantasia) a la palabra1(ana). Imprimiendo
p1: fantasia
p2: fantasia
Este paso no sucede asi. Por el manejo de memoria que no encuentro como solucionar.
Despues de haber hecho una copia de cadenas, independientemente si p1 paso a p2 o p2 paso a p1, debo tener la opcion de capturar nuevamente la cadena ya dentro del programa, ejemplo.
Desde la linea de comandos se mando
C:\>programa ana fantasia
p1: ana
p2: fantasia
Captura nueva dentro del programa: "el perico verde", imprime
p1: el perico verde
p2: fantasia
He tratado de usar realloc, malloc, y calloc, pero no me da algun resultado, por favor alguien me podria hechar la mano con estas 2 funciones.
portirijillo:
Me parece que con el siguiente codigo logre conseguir lo buscado, cualquier error que encuentren por favor avisarme.
--- Código: C ---#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <ctype.h> char *copia(char *);char tamano(char *);char *capturar(); int main(int argc, char **argv) { char *p1,*p2; p1 = (char *)calloc(tamano(argv[1]),sizeof(char)); p2 = (char *)calloc(tamano(argv[2]),sizeof(char)); p1=copia(argv[1]); printf("\n"); p2=copia(argv[2]); /*Primer elemento es el origne, el segundo el destino*/ printf("\n"); p2=copia(p1); printf("\nOrigen : %s",p1); printf("\nDestino : %s",p2); p2=capturar(); printf("\nOrigen : %s",argv[2]); printf("\nDestino capturado : %s",argv[1]); printf("\nDestino : %s",p2); printf("\nOrigen : %s",p1); return 0;} char *capturar(){ char car; char *cadena=NULL; int i=0,num=0; printf("\nIntroduce la cadena: "); while ((car=getchar()) != '\n') /*Finaliza con un enter*/ { if(i>=num) { num+=10; cadena=(char *)realloc((char *)cadena,(num)*sizeof(char)); if (cadena == NULL) exit(-1); } cadena[i++] = car; } cadena[i++] = '\0'; return cadena;} char *copia(char *origen) { char *tmp; int i=0; tmp = (char *)calloc(tamano(origen),sizeof(char)); while(origen[i]) { tmp[i] = origen[i]; i++; } tmp[i]='\0'; return tmp;} char tamano(char *palabra) { int i=0; while(palabra[i]) i++; return i;}
Navegación
Ir a la versión completa