Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/07/2011, 03:16
Avatar de Doommarine_Maxi
Doommarine_Maxi
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 9 meses
Puntos: 8
Funcion recursiva de cadenas


Hola, queria comentarles una duda que tengo sobre una funcion
recursiva usando una cadena.

Array.h
Código C++:
Ver original
  1. #include <string.h>
  2. #include <iostream>
  3. #include <stdlib.h>
  4.  
  5. int long_string(char arr[])
  6. {
  7.      int i = 0;
  8.      while (arr[i] != '\0')
  9.            i++;
  10.            
  11.      return i;
  12. }
  13.  
  14. char *cnt_str(char *dat1, char *dat2)
  15. {
  16.      int max_long = long_string(dat1) + long_string(dat2);
  17.      char *buffer = new char[max_long*sizeof(char)];
  18.      int x=0,z=0;
  19.      
  20.      while (dat1[x] != '\0')
  21.            buffer[x] = dat1[x++];
  22.            
  23.      while (dat2[z] != '\0')
  24.            buffer[x++] = dat2[z++];
  25.      
  26.      buffer[x] = '\0';
  27.      
  28.      return buffer;
  29. }

main.cpp
Código C++:
Ver original
  1. #include <time.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include "Arrays.h"
  5.  
  6. using namespace std;
  7. char *recursiva(char* dato, int veces)
  8. {
  9.      if (veces == 1)
  10.              return dato;
  11.              
  12.      veces--;
  13.      return cnt_str(dato, recursiva(dato, veces));    
  14. }
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.     char *mirray = new char[512];
  19.     strcpy(mirray, recursiva("array ", 3));
  20.    
  21.     cout << "Recursiva: " << mirray << endl;
  22.     char *texto = cnt_str("Probando ", " union de strings");
  23.     system("PAUSE");
  24.     return 1;
  25. }

Asi como esta el codigo anda genial, el problema es cuando quiero hacer mas de 3 recursiones (veces), cuando cambio el parametro veces por mas de 4, da error el programa y se sale.

Supongo que hay algun problema con las dimensiones en las funcion de cnt_str.

Gracias por leer y tomarse el tiempo de ayudar a los demas D:

(sobre todo gracias a ti sam90, admiro tu forma prolija y eficiente de programar)