Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: gecko on April 08, 2011, 01:07:10 AM

Title: Copiar un array de strings a otro...
Post by: gecko on April 08, 2011, 01:07:10 AM
Bueno, vuelvo con una duda concreta:

tengo varios arrays de strings... y lo que quiero es que una funcion elija uno de esos y lo copie en un array nuevo... pero el problema es que no se como hacer que el array nuevo tenga el mismo tamaño que el elegido, ya que todos esos arrays tendrian tamaños distintos...

un ejemplo
[code language="bennu"]
// tengo
string array1[]="uno", "dos", "tres";
string array2[]="uno solo";
string array3[]="uno"," otro mas";

// y lo tendria que pasar a un
string arraySeleccionado[];
[/code]

Alguna pista? :O
Title: Re: Copiar un array de strings a otro...
Post by: SplinterGU on April 08, 2011, 02:26:36 AM
todos los arrays deben tener el mismo tamaño...

y tampoco podes crear un array sin dimension ni valores.

asi que te conviene poner un maximo del array, sino usar punteros, pero en este caso no podes usar strings para el dato.
Title: Re: Copiar un array de strings a otro...
Post by: gecko on April 08, 2011, 02:41:42 AM
ah, con eso de no ponerle dimension ni valores queria representar que era un array muy dinamico :P

y una vez que declaro un array, no puedo borrarle los lugares que me sobran y achicarlo? :P

O primero calcular los lugares que necesito y despues declarar el array?


Por ahora voy a hacer que [code language="bennu" options="singleline"]arraySeleccionado[][/code] sea tan grande como el mas grande. Gracias!
Title: Re: Copiar un array de strings a otro...
Post by: SplinterGU on April 08, 2011, 02:52:31 AM
no, un array declarado es un array cerrado a nivel dimensiones.

no, no se puede calcular y luego declarar un array, a menos que uses memoria dinamica, pero en ese caso, no es un array.

no solo arrayseleccionado tiene que ser el mas grande, para que funcionen las copias de array, tenes que tener todos los arrays del mismo tamaño.
Title: Re: Copiar un array de strings a otro...
Post by: gecko on April 08, 2011, 02:56:25 AM
ok, gracias por las aclaraciones.

Lo que tenia pensado hacer es recorrer el array que quiero copiar, e ir valor a valor metiendolo en arrayseleccionado, y que los demas lugares de arrayseleccionado que no llegue a ocupar me queden vacios nomas, o con "". Supongo que con eso no tendria que tener problemas.
Title: Re: Copiar un array de strings a otro...
Post by: SplinterGU on April 08, 2011, 03:20:08 AM
asi no tendrias problemas, aunque seria mas lento.
Title: Re: Copiar un array de strings a otro...
Post by: Drumpi on April 08, 2011, 11:55:37 AM
Por esto mismo me cree una serie de funciones que me permiten trabajar con listas enlazadas de strings.
Si te vas a:
http://forum.bennugd.org/index.php?topic=2164.0

Y descargas el adjunto, puedes usar STRING_CLASS.H y STRING_CLASS.INC para trabajar con listas de cadenas. Lo malo es que no están documentadas, pero creo que los nombres son suficientemente explicativos (en la propia función creo que añadí una pequeña explicación).
Si os interesa, esta tarde puedo subiros los ficheros con el programa de ejemplo/prueba (documentarlo va a ser imposible, me llevaría bastante tiempo).
Title: Re: Copiar un array de strings a otro...
Post by: SplinterGU on April 08, 2011, 02:42:25 PM
drumpi, string como dato string, solo es posible usar listas enlazadas que sean globales, o array dinamicos tambien globales, no podes usarlos como privados o locales.

ahora si lo que usas son arrays de chars para definir una string, eso es otra cosa.
Title: Re: Copiar un array de strings a otro...
Post by: Drumpi on April 08, 2011, 06:52:55 PM
¿Y qué he dicho yo? la string_class usa una lista enlazada con nodos que contienen únicamente una string. Suministra funciones para añadir, quitar, borrar, poner en mayúsculas, en minúsculas, copiar, clonar, obtener su orden... a la lista de strings.

Y no tienen que ser globales: al usar punteros pueden ser de uso privado. Y uso de memoria óptimo :D :D :D
Title: Re: Copiar un array de strings a otro...
Post by: SplinterGU on April 08, 2011, 07:01:51 PM
no drumpi, no.

no pueden ser locales uso de memoria dinamica para almacenar datos strings, a menos que sean char[].

y te lo vuelvo a explicar, aunque ya lo hice cientos de veces, cuando se crea una string se reserva dicho identificador y memoria, con cada modificacion de la string ese identificador interno cambia y tambien la memoria asociada a ella, y cuando un proceso muere, las strings que no son usadas se liberan, en el caso de los punteros (memoria dinamica) el motor pierde el rastro y no tiene forma de hacer un manejo de estos datos, y por ende no actualiza contadores de uso y no libera la memoria o puede que libere memoria que esta siendo usada en un puntero ya que el no sabe que esta en uso.

ya explique ciento de veces que no se deben usar punteros/memoria dinamica con strings.
Title: Re: Copiar un array de strings a otro...
Post by: Drumpi on April 08, 2011, 07:15:28 PM
Pues con esto:
http://forum.bennugd.org/index.php?topic=2208.0
Se puede, al menos, no he tenido ningún problema ;D
Title: Re: Copiar un array de strings a otro...
Post by: SplinterGU on April 08, 2011, 07:29:46 PM
si son array dinamicos de strings, puede que no tengas problemas de crash (o si), pero consumira memoria y mas memoria y mas memoria...