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

[0] Índice de Mensajes

Ir a la versión completa