Copiar un array de strings a otro...

Started by gecko, April 08, 2011, 01:07:10 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gecko

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
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

gecko

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!
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

gecko

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.
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

asi no tendrias problemas, aunque seria mas lento.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

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).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

¿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
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

si son array dinamicos de strings, puede que no tengas problemas de crash (o si), pero consumira memoria y mas memoria y mas memoria...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2