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

De puede crear string sin inicializar

Estas en el tema de De puede crear string sin inicializar en el foro de C/C++ en Foros del Web. Buenas, mi duda es la siguiente: Pretendo crear una función que me copie simplemente dos cadenas (se que existen funciones para eso en C++, pero ...
  #1 (permalink)  
Antiguo 20/04/2010, 05:37
 
Fecha de Ingreso: abril-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
De puede crear string sin inicializar

Buenas, mi duda es la siguiente:
Pretendo crear una función que me copie simplemente dos cadenas (se que existen funciones para eso en C++, pero el final a donde quiero llegar es más complejo que solo eso).
He probado a crearlo con un string sin inicializar y me lo depura bien No obstante, cuando tiene que copiar las cadenas se queda pillado, me da error y se cierra sin cumplir su función.
Solo me va el programa si inicializo el string con cualquier cadena de caracteres mayor que la que quiero copiar, pero si muestro por pantalla el resultado aparecen la cadena copiada y después los carácteres sobrantes de la segunda cadena.
El código de la fución sería:

string url(string cad)
{string c1;
int i=0;
int j=0;
while (cad[i]!='\0')
{
c1[j]=cad[i];
j++;
i++;
}
return c1;
}

He probado a cerrar manualmente las cadenas con \0 y a hacerlo mediante punteros y siempre me da error. De todas formas pienso que esta es la forma más sencilla y debería funcionar.
Utilizo Visual C++. Es posible que sea problema del programa?
Muchas gracias por las respuestas.
Un saludo.
  #2 (permalink)  
Antiguo 20/04/2010, 08:24
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: De puede crear string sin inicializar

string es el tipo std::string o es un typedef a un char* o un char[] ?
  #3 (permalink)  
Antiguo 21/04/2010, 08:17
 
Fecha de Ingreso: abril-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
Respuesta: De puede crear string sin inicializar

string es del tipo std::string. Pretendo que c1 sea un objeto de esta clase.
  #4 (permalink)  
Antiguo 21/04/2010, 08:40
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: De puede crear string sin inicializar

Si es asi, no te recomiendo usar la notacion c1[j] = cad[i] para asignar valores.
Te recomiendo usar

c1 += cad[i]

y olvidarte del indice j.
  #5 (permalink)  
Antiguo 21/04/2010, 10:12
 
Fecha de Ingreso: abril-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
Respuesta: De puede crear string sin inicializar

Joooe!!! Muchiiiiisimas gracias!!!
Ya funciona, con la de vueltas que le había dao...!!!
Sabía que tenía que estar por haí el fayo porque al correrlo por pasos se quedaba ahí pero no se me ocurria...
Sabrías decirme la razón de por qué con el subíndice j no va?? Por saberlo para futuros problemas...
Gracias otra vez. Un saludo
  #6 (permalink)  
Antiguo 21/04/2010, 10:31
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: De puede crear string sin inicializar

Respuesta corta: El indice accede a valores que previamente asignaste, no sirve para asignar.

Respuesta mas larga: La clase, seguramente esta escrita manteniendo un contador interno para saber cuantos caracteres hay copiados y cuando usas el operador +=, este contador interno se incrementa. Cuando en cambio usas el operador [], se accede a lo que ya hay, y el tamaño no se modifica. El string parte vacio, con tamaño 0, y tu intentas acceder a la posicion x, pero para el objeto, esa posicion nunca ha sido asignada.

Creo que la excepcion seria asignar a una posicion ya existente, una vez que el string ya tiene datos y que fueron asignados usando metodos de esa clase.
  #7 (permalink)  
Antiguo 21/04/2010, 10:46
 
Fecha de Ingreso: abril-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
Respuesta: De puede crear string sin inicializar

Claro, por eso cuando inicializaba el string con cualquier cadena funcionaba bien.
Muy completas tu respuestas.
Muchas gracias nuevamente
  #8 (permalink)  
Antiguo 21/04/2010, 10:48
 
Fecha de Ingreso: abril-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
Respuesta: De puede crear string sin inicializar

Pd: Soy nueva en este foro y no se votar.... :S
Donde está lo de darte puntos? no se puede?
  #9 (permalink)  
Antiguo 21/04/2010, 10:58
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: De puede crear string sin inicializar

Aqui se llama Karma, se da con uno de los iconos a la izquierda, y llevo la friolera de 0 puntos :)
  #10 (permalink)  
Antiguo 22/04/2010, 05:20
 
Fecha de Ingreso: abril-2010
Mensajes: 10
Antigüedad: 14 años
Puntos: 1
Respuesta: De puede crear string sin inicializar

Buenas! No me e olvidado de tu karma, pero pareceser que tengo problemas porque no me deja (no se si porque seré nueva...). Ya me he puesto en contacto con el administrador y estoy esperando que me responda. En cuanto lo haga te puntuo! ;)

Etiquetas: string
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 15:26.