Foro de elhacker.net

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
  1. #include <iostream>
  2. using namespace std;
  3. char str1[20],str2[20],str3[20];
  4. void myStrcat(char [],char []);
  5.  
  6. void myStrcat(char str1[],char str2[]){
  7. int c,d;
  8. c = 0;
  9.  
  10.   while(str1[c] != '\0') {
  11.      c++;  
  12.   }
  13.  
  14.   d = 0;
  15.  
  16.   while(str2[d] != '\0'){
  17.      str1[c] = str2[d];
  18.      d++;
  19.      c++;
  20.   }
  21.  
  22.   str1[c] = '\0';
  23. }
  24.  
  25.  
  26. int main(){
  27. cout << "Enter first string: " << endl;
  28. cin >> str1;
  29. cout << "Enter secound string: " << endl;
  30. cin >> str2;
  31. myStrcat(str1,str2);
  32. cout << "Result is " << str1 << endl;
  33. }
  34.  


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
  1.   #include <iostream>
  2. using namespace std;
  3. void myStrcat(char [],char [],char []);
  4. char str1[20],str2[20],str3[20];
  5. void myStrcat(char str1[],char str2[], char str3[]){
  6. int c,d;
  7.     c = 0;
  8.  
  9. if((str1 != '\0') && (str2 != '\0')){
  10. str3 = str1;
  11. myStrcat(str1+1, str2, str3+1);
  12. }else if((str1 == '\0') && (str2 != '\0')){
  13. str3 = str2;
  14. myStrcat(str1+1, str2, str3+1);
  15. }
  16. str3[c] = '\0';
  17. }
  18.  
  19.  
  20. int main(){
  21. cout << "Enter first string: " << endl;
  22. cin >> str1;
  23. cout << "Enter secound string: " << endl;
  24. cin >> str2;
  25. myStrcat(str1,str2,str3);
  26. cout << "Result is " << str3 << endl;
  27. }
  28.  


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

Código:
myStrcat(str1,str2,str3);

debería ser
Código:
yStrcat(&str1,&str2,&str3);
por ser array

Código:
(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

Código:
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
Código
  1. char *myStrcat(char *str1,char *str2){
  2. int len = strlen(str1)+strlen(str2);
  3. char *nuevo = calloc(len +1,sizeof(char));
  4. snprintf(nuevo,len,"%s%s",str1,str2);
  5. return nuevo;
  6. }


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
Citar
pero no puedo usar funciones ni punteros por eso lo puse global los arreglos :/
ya fallaste
Código:
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...

Código
  1. void myStrcat(char *str1,char *str2){
  2. snprintf(str3,20,"%s%s",str1,str2);
  3. }

el anterior es solo usando snprintf.

Código
  1. void myStrcat(){
  2.        int i =0, j=0;
  3. while(str1[i] != '\0'){
  4.             str3[i] = str1[i];
  5.             i++;
  6.        }
  7.       while(str2[j] != '\0'){  
  8.           str3[i +j] = str1[j];
  9.            j++;
  10.        }
  11. }


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.

Código
  1. char *myStrcat(char *s1,char *s2, char *s3){
  2.        int i =0, j=0;
  3. while(s1[i] != '\0'){
  4.             s3[i] = s1[i];
  5.             i++;
  6.        }
  7.       while(s2[j] != '\0'){  
  8.           s3[i +j] = s2[j];
  9.            j++;
  10.        }
  11. }

Es lo mismo que

Código
  1. char *myStrcat(char s1[],char s2[], char s3[]){
  2.        int i =0, j=0;
  3. while(s1[i] != '\0'){
  4.             s3[i] = s1[i];
  5.             i++;
  6.        }
  7.       while(s2[j] != '\0'){  
  8.           s3[i +j] = s2[j];
  9.            j++;
  10.        }
  11. }

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
  1.      char *myStrcat(char s1[],char s2[], char s3[]){
  2.            int i =0, j=0;
  3.     while(s1[i] != '\0'){
  4.                 s3[i] = s1[i];
  5.                 i++;
  6.            }
  7.           while(s2[j] != '\0'){  
  8.               s3[i +j] = s2[j];
  9.                j++;
  10.            }
  11.    }
  12.  


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