Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Funcion recursiva de cadenas

Estas en el tema de Funcion recursiva de cadenas en el foro de C/C++ en Foros del Web. Hola, queria comentarles una duda que tengo sobre una funcion recursiva usando una cadena. Array.h @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <string.h> #include <iostream> ...
  #1 (permalink)  
Antiguo 16/07/2011, 03:16
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 10 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)
  #2 (permalink)  
Antiguo 16/07/2011, 20:06
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: Funcion recursiva de cadenas

A mi no me sucede eso que tu dices. Lo corri con veces igual a 10 y funcion estupendo. El unico problema que le encontre es que a max_long dedes sumarle uno, para almacenar el caracter de fin de linea (a lo mejor eso te esta mantando). Yo me di cuanta porque siempre inprime caracteres basura al final de todo.

Código C:
Ver original
  1. int max_long = long_string(dat1) + long_string(dat2) + 1 ;

Otras cosas para recalcar, asi vas aprendiendo, esta linea en principio seria innecesaria porque la cadena ya viene creada desde un new.

Código C++:
Ver original
  1. strcpy(mirray, recursiva("array ", 3));

Directamente podrias gardarla en una variable tipo Char *.

Todo lo demas esta muy bien! Saldos
  #3 (permalink)  
Antiguo 16/07/2011, 20:49
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 10 meses
Puntos: 8
Respuesta: Funcion recursiva de cadenas

Gracias sam90, tenias razon tenia que sumarle 1 al max_long, igual ya habia migrado a funciones recursivas con strings, pero genial por que al hacerlo con cadenas no tengo que andar haciendo conversiones!

Etiquetas: char, chars, funcion, recursiva
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:17.