19/08/2014, 09:58
|
| | Fecha de Ingreso: agosto-2013 Ubicación: Canelones
Mensajes: 6
Antigüedad: 11 años, 3 meses Puntos: 0 | |
¿ Por qué la variable cad de la función to_string() retorna basura ? Básicamente el problema es el siguiente: en la función to_string(), antes del return, la variable cad retorna un string limpio, pero al invocar la función to_solution(to_string()), la cadena devuelta imprime basura ni bien entra a esa otra función.
¿ Cuál puede ser el problema ?
P.D: no se debe cambiar los encabezados de las funciones, ni se debe llamarlas de otra manera.
Código:
char* to_string(Rarray<Partido**> sol1)
{
int TAM=1000;
//int TAM = 5 // la fecha + el dia + el ';' + los '()' + la ','
static char* cad = NULL;
char* retornar= NULL;
//char *cad, *retornar = NULL;
cad = new char[TAM];
char buffer[4];
retornar = cad;
//strcpy(retornar,"");
for(int i=0;i<DIMENSION_PROBLEMA;i++){
for(int j=0;j<DIMENSION_PROBLEMA;j++){
strcat(retornar,"(");
int fecha = sol1[i][j]->getFecha();
sprintf(buffer,"%d",fecha);
strcat(retornar,buffer);
strcat(retornar,",");
int dia = sol1[i][j]->getDia();
sprintf(buffer,"%d",dia);
strcat(retornar,buffer);
strcat(retornar,")");
}
if(i!=DIMENSION_PROBLEMA-1){
strcat(retornar,";");
}
}
// cout << prueba << endl;*/
cout <<"La cadena cad antes del return es: "<< cad << endl;
cout <<"La cadena retornar antes del return es : " <<retornar << endl;
//cout <<"La direccion de memoria de cad[0] antes del return es: " << &cad)<<endl;
return &cad[0];
}
void to_Solution(char *_string_, Rarray<Partido**> &_var){
//en realidad el cabezal es: Solution::to_Solution(char *_string_)
//tambien hay que sustituir DIMENSION_PROBLEMAENSION_PROBLEMA por pbm.DIMENSION_PROBLEMAension()
//PRIMERO ACOMODO CADA FILA EN CADA CELDA DEL ARREGLO SUBSTRING
char* substring[DIMENSION_PROBLEMA];
char* p;
char* aux;
p =strtok(_string_,";");
aux=p;
substring[0]=aux;
int pos=1;
while (p){
p=strtok(NULL,";");
if (p){
aux=p;
substring[pos]=aux;
pos++;
}
}
//AHORA PROCESO CADA CELDA DEL ARREGLO DE FORMA DE OBTENER LOS NROS DE
//LA FILA PARA IR GUARDANDO EN EL SOLUTION
char* subcadena_aux;
for (int i=0; i<DIMENSION_PROBLEMA; i++){
int j=1;//me muevo por el char*
int acumulador=0;
subcadena_aux = substring[i];
cout << "SUBCADENA: "<< i << endl;
while(acumulador<DIMENSION_PROBLEMA){
subcadena_aux = substring[i]+j;
p = strtok(subcadena_aux, ",");
int tam_primer_num=strlen(p);
int fecha = atoi(p);
cout << "El primer numero es: " << fecha << endl;
p = strtok(NULL, ")");
int tam_segundo_num=strlen(p);
int dia = atoi(p);
cout << "El segundo numero es: " << dia << endl;
_var[i][acumulador]->setFecha(fecha); //descomentar
_var[i][acumulador]->setDia(dia); //descomentar
j = j + tam_primer_num + tam_segundo_num + 3;//el tres es por los caracteres extras de la cadena
acumulador++;
}
}
} //end Solution::to_Solution
int main() {
//EJEMPLO DE UNA ENTRADA DE STRING CON DIMENSION_PROBLEMA 4
//char entrada[]= "(-1,-1)(2,1)(3,4)(1,2);(1,2)(-1,-1)(2,1)(3,4);(3,4)(1,2)(-1,-1)(2,1);(2,1)(3,4)(1,2)(-1,-1)";
int arreglo1[DIMENSION_PROBLEMA-1];
Rarray<Partido**> sol1(DIMENSION_PROBLEMA);
Rarray<Partido**> sol2(DIMENSION_PROBLEMA);
inicializar(sol1, arreglo1);
rellenar(arreglo1,sol1);
//char* salida = to_string(sol1);
//cout << " La salida es: "<< salida << endl;
to_Solution(to_string(sol1),sol2);
ImprimirMatriz(sol2);
return 0;
}
|