Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: geshiro en 21 Mayo 2016, 19:42 PM

Título: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 21 Mayo 2016, 19:42 PM
como puedo hacr que en mi funcion recursiva pase a mi variable str3 todo el valor de la funcion recursiva

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
char str1[20],str2[20],str3[20];
void myStrcat(char [],char []);

void myStrcat(char str1[],char str2[]){
int c,d;
c = 0;

   while(str1[c] != '\0') {
      c++; 
   }

   d = 0;

   while(str2[d] != '\0'){
      str1[c] = str2[d];
      d++;
      c++;
   }

   str1[c] = '\0';
}


int main(){
cout << "Enter first string: " << endl;
cin >> str1;
cout << "Enter secound string: " << endl;
cin >> str2;
myStrcat(str1,str2);
cout << "Result is " << str1 << endl;
}
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: HardForo en 21 Mayo 2016, 20:50 PM
No veo ninguna funcion recursiva  :xD
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 21 Mayo 2016, 22:52 PM
 aqui esta me da error de Segmentation fault
Código (cpp) [Seleccionar]

   #include <iostream>
using namespace std;
void myStrcat(char [],char [],char []);
char str1[20],str2[20],str3[20];
void myStrcat(char str1[],char str2[], char str3[]){
int c,d;
     c = 0;

if((str1 != '\0') && (str2 != '\0')){
str3 = str1;
myStrcat(str1+1, str2, str3+1);
}else if((str1 == '\0') && (str2 != '\0')){
str3 = str2;
myStrcat(str1+1, str2, str3+1);
}
str3[c] = '\0';
}


int main(){
cout << "Enter first string: " << endl;
cin >> str1;
cout << "Enter secound string: " << endl;
cin >> str2;
myStrcat(str1,str2,str3);
cout << "Result is " << str3 << endl;
}
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: AlbertoBSD en 21 Mayo 2016, 22:55 PM
Tu funcion tiene buffer overflow si lo que quieres es concatenar cadenas la funcion recursiva no te sirve..

Te recomiendo usar memset strlen y si acaso snprintf
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: engel lex en 21 Mayo 2016, 22:55 PM
tienes un par de problemas confusos

myStrcat(str1,str2,str3);

debería ser
yStrcat(&str1,&str2,&str3);
por ser array

(str1 != '\0') && (str2 != '\0')
está mal porque los 3 str son array, y no pueden ser '\0' eso inplicaría que son un punto de esa cadena

myStrcat(str1+1, str2, str3+1);
estás sumandole un entero a un array char...

en alguno de estos puntos es el segmentation (o en todos)
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 21 Mayo 2016, 23:23 PM
entonces los tendria que cambar POR null
?
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 21 Mayo 2016, 23:25 PM
como podria modificar mi funcion para que pueda concatenar
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: AlbertoBSD en 21 Mayo 2016, 23:38 PM
char *myStrcat(char *str1,char *str2){
int len = strlen(str1)+strlen(str2);
char *nuevo = calloc(len +1,sizeof(char));
snprintf(nuevo,len,"%s%s",str1,str2);
return nuevo;
}
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 22 Mayo 2016, 00:04 AM
pero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: engel lex en 22 Mayo 2016, 00:25 AM
Citarpero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/
ya fallaste
void myStrcat(char str1[],char str2[], char str3[])

eso es una función con punteros como argumentos XD si vas a pasar array inevitablemente se hace uso de punteros, en su defecto declara los array globales y mystrcat no lleva argumentos, (a demás por ser globales pueden producir comportamiento no esperado) simplemente la llamas y sabe que str3 va todo lo de 1 y 2

Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: AlbertoBSD en 22 Mayo 2016, 00:46 AM
Creo que se refiere a funciones de librerias...

void myStrcat(char *str1,char *str2){
snprintf(str3,20,"%s%s",str1,str2);
}


el anterior es solo usando snprintf.

void myStrcat(){
       int i =0, j=0;
while(str1[i] != '\0'){
            str3[i] = str1[i];
            i++;
       }
      while(str2[j] != '\0'){  
          str3[i +j] = str1[j];
           j++;
       }
}



str3 debe de tener al menos el doble de tamaño o la suma de str1 y str2

sele puede agregar otra condicion de paro a cada while mientras i < 20  al primero y respecto a j en el 2do
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 22 Mayo 2016, 01:31 AM
como podria hacerlo con puros argumentos?
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 22 Mayo 2016, 01:42 AM
me refiero que debo hacer una funcion recursiva sin usar funciones de libreria hacer la misma funcion que hace strcat pero recursiva
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: AlbertoBSD en 22 Mayo 2016, 01:50 AM
Si ya tienes las variables globales no tienes que usar argumentos.

Si quieres usar argumentos.

char *myStrcat(char *s1,char *s2, char *s3){
       int i =0, j=0;
while(s1[i] != '\0'){
            s3[i] = s1[i];
            i++;
       }
      while(s2[j] != '\0'){  
          s3[i +j] = s2[j];
           j++;
       }
}


Es lo mismo que

char *myStrcat(char s1[],char s2[], char s3[]){
       int i =0, j=0;
while(s1[i] != '\0'){
            s3[i] = s1[i];
            i++;
       }
      while(s2[j] != '\0'){  
          s3[i +j] = s2[j];
           j++;
       }
}


Recursiva.... La verdad no se que maestro te pide a hacer eso.

Voy a pensar en una forma eficiente de hacer algo recursivo para hacer strcat. Luego te contesto como podria ser recursiva
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 22 Mayo 2016, 02:18 AM
es que si esta bien asi solo que los while deben ser sustitudios por el if else D: no se porque volver a inventar la funcion ya hecha

Código (cpp) [Seleccionar]

     char *myStrcat(char s1[],char s2[], char s3[]){
           int i =0, j=0;
    while(s1[i] != '\0'){
                s3[i] = s1[i];
                i++;
           }
          while(s2[j] != '\0'){  
              s3[i +j] = s2[j];
               j++;
           }
   }
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: engel lex en 22 Mayo 2016, 02:42 AM
No dijiste sin punteros? Ahi estas usando 4 solo en la declaración xD
Título: Re: como pasar variable de una a otra desde una funcion
Publicado por: geshiro en 22 Mayo 2016, 03:51 AM
en mi codigo uso punteros solo llamo la variable