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

std::string

Estas en el tema de std::string en el foro de C/C++ en Foros del Web. una pregunta sencilla, se puede copiar un std::string a otro std::string??...
  #1 (permalink)  
Antiguo 26/09/2010, 12:07
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
std::string

una pregunta sencilla, se puede copiar un std::string a otro std::string??
  #2 (permalink)  
Antiguo 26/09/2010, 14:53
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: std::string

si:
Código:
std::string str1 = "test";
std::string str2 = str1; // copia de la cadena
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #3 (permalink)  
Antiguo 27/09/2010, 08:32
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: std::string

uups, muchas gracias :), pero me equivoque al preguntar.
el problema es que al copiarlos (usando = ), en ese momento me salta una segmentation fault, por que? por cierto, esto es dentro de una funcion donde el string donde se copian las cosas es pasado or referencia ( & )
  #4 (permalink)  
Antiguo 27/09/2010, 10:42
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: std::string

¿puedes enseñaros esta función?
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #5 (permalink)  
Antiguo 27/09/2010, 10:45
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: std::string

si, aqui esta:
Código C++:
Ver original
  1. void cruce(string &hijo1, string &hijo2){
  2.  
  3.     int punto = (int) (NUM_ALE*TASA_CRUCE);
  4.  
  5.     string t1, t2;
  6.  
  7.     t1=hijo1.substr(0, punto) + hijo2.substr(punto+1, LON_CROMO);
  8.     t2=hijo2.substr(0, punto) + hijo1.substr(punto+1, LON_CROMO);
  9.  
  10.     hijo1=t1; hijo2=t1;
Muchas gracias
  #6 (permalink)  
Antiguo 27/09/2010, 11:01
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: std::string

Vale. El problema viene de los funciones substr().
No te puedo decir exactamente porque no conozco algunas variables y no se como estan las cadenas cuando entras en esta funcion, pero es aquí fijo.
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #7 (permalink)  
Antiguo 27/09/2010, 11:08
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: std::string

las cadenas son simplemente 1s y 0s, todas de la misma longitud (LON_CROMO) y punto simplemente indica a partir de donde cortar cada cadena, para hacer dos partes. cada t contiene una parte de cada hijo
  #8 (permalink)  
Antiguo 27/09/2010, 14:00
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: std::string

¿Y que valen las variables NUM_ALE y TASA_CRUCE?
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #9 (permalink)  
Antiguo 27/09/2010, 14:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: std::string

Bueno, primero una aclaracion, que es que trabajar por la noche no es bueno y te saltas pasos. realmente el código es así, aunque no varia mucho la cosa ya que el eror sigue siendo el mismo:
Código C++:
Ver original
  1. void cruce(string &hijo1, string &hijo2){
  2.  
  3.     if (NUM_ALE < TASA_CRUCE){
  4.  
  5.         int punto = (int) (NUM_ALE * LON_CROMO);
  6.  
  7.         string t1, t2;
  8.  
  9.         t1=hijo1.substr(0, punto) + hijo2.substr(punto+1, LON_CROMO);
  10.         t2=hijo2.substr(0, punto) + hijo1.substr(punto+1, LON_CROMO);
  11.  
  12.         hijo1=t1; hijo2=t1;
  13.     }
  14. }

TASA_CRUCE vale 0.45 y NUM_ALE es una macro que devuelve un float entre 0 y 1.
  #10 (permalink)  
Antiguo 28/09/2010, 05:01
Avatar de r0d
r0d
 
Fecha de Ingreso: noviembre-2007
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: std::string

Mhh.
Si entiendo bien:
. punto siempre vale 0 (porque (in) 0.45x0 y (int) 0.45x1 valen ambos 0).
. hijo1 = "1s" y hijo2 = "0s" => el tamaño de hijo1 y hijo2 es 2
. => LON_CROMO = 2

Entonces, el codigo siguiente:
t1=hijo1.substr(0, punto) + hijo2.substr(punto+1, LON_CROMO);
Seria:
t1=hijo1.substr(0, 0) + hijo2.substr(1, 2);
¿Es exacto?

Tienes que mirar bien como funciona la funcion substr(). El primero parametro de esta funcion es el indice de principio, y el segundo es el numero de caracteres que cogemos.
Entonces si el tamaño de hijo2 est 2, pues hijo2.substr(1, 2) no tiene sentido.
__________________
Alicia: Sólo quiero saber que camino debo tomar.
Gato risón: Pues... depende mucho de donde quieras ir.

Mi página web
  #11 (permalink)  
Antiguo 28/09/2010, 07:57
 
Fecha de Ingreso: noviembre-2009
Mensajes: 186
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: std::string

no, eso no es válido con el código de mi mensaje anterior, punto será como poco 1, y como maximo 1 menos que LON_CROMO, valor que yo asigno en un #define. las cadenas tienen todas la misma longitud, y tanto 1s como 0 pueden estar en cualquiera.
revisaré como funciona .substr().

por cierto, me fusta tu pag. web, pero el enlace esta mal puesto

Etiquetas: Ninguno
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 23:26.