Newsgroup: it.comp.lang.c++
Titolo: Arrays

Ciao a tutti, 
ho una domanda che mi assilla e spero(sono certo) che possiate
rispondermi:
e' possibile definire la lunghezza di un array a tempo di esecuzione,
o devo per forza inizializzarlo specificandone la lunghezza?
E poi, nessuno ha una funzione per invertire l'ordine dei caratteri di
una stringa?
Grazie,
MaNu!
P.S: si', ancora una domanda(prometto che e' l'ultima:): a cosa
corrisponde il carattere di backspace?

corrisponde il carattere di backspace?
a un backspace! :) (scherzo, non ho capito la domanda)
--
Marco Danti
remove NOSPAM from my address if you want to reply directly to me; sorry.

 corrisponde il carattere di backspace?
dipende da quale ambiente stai utilizzando : molti tasti non hanno
associato solo un valore ASCII, ma vengono rappresentati da un codice
esteso; in tutti i sistemi ci sono delle funzioni che permettono di
accedervi.
------=_NextPart_000_01BC7F2D.0359BD80
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<html><head></head><BODY bgcolor=3D"#D8D0C8"><p><font size=3D2 =
color=3D"#000080" face=3D"Arial"><u>&gt; e' possibile definire la =
lunghezza di un array a tempo di esecuzione,<br>&gt; o devo per forza =
inizializzarlo specificandone la lunghezza?<br></u><font =
color=3D"#000000"><br>Un vettore =E8 essenzialmente un puntatore =
costante ad una zona di memoria allocata per ospitare un =
<b>determinato</b> numero di elementi. Inoltre viene deallocato =
automaticamente. Quindi con i vettori niente da fare.<br>Puoi per=F2 =
usare un puntatore ed allocare dinamicamente memoria con <b><i>new =
</b>(<font color=3D"#FF0000">vec =3D new TypeId [dim]</i><font =
color=3D"#000000">).<b><i> </i></b>Se devi anche <i>cambiare</i> il =
numero di elementi (dopo aver allocato spazio), non puoi comunque che =
<br><br></p>
<p><ul><li>allocare un <b>nuovo</b> vettore di dimensione pi=F9 grande =
(<font color=3D"#FF0000"><i>tmp =3D new TypeId [new_dim]</i><font =
color=3D"#000000">)<li>copiarci il contenuto (<font =
color=3D"#FF0000"><i>for (int j=3D0;j&lt;dim;j++) tmp[j] =3D =
vec[j]</i><font color=3D"#000000">) <li>deallocare =
(<b><i>delete</i></b>) il vecchio (<font color=3D"#FF0000"><i>delete[] =
vec</i><font color=3D"#000000">)</ul></p>
<p>Se a questo punto scrivi <font color=3D"#FF0000"><i>vec =3D =
tmp</i><font color=3D"#000000"> avrai ottenuto quello che desideravi =
(anche se non certo in modo efficiente).<br>Ci sono altre soluzioni =
?<br><br></p>
<p><ul><li>allocare uno spazio sufficiente fin dall'inizio.<li>usare una =
lista anzich=E8 un vettore.<li>un <i>merge </i>tra le due precedenti =
(come per i clusters occupati dai files).</ul></p>
<p><br><font color=3D"#000080"><u>&gt; E poi, nessuno ha una funzione =
per invertire l'ordine dei caratteri di<br>&gt; una =
stringa?<br></u><font color=3D"#000000"><br><font =
color=3D"#FF0000"><i>int pos =3D strlen(str)-1, j=3D0;<br>char =
tmp;<br><br>while(pos &gt; j)<br>{<br>&#009;tmp =3D =
str[pos-j];<br>&#009;str[pos-j] =3D str[pos+j];<br>&#009;str[pos+j] =3D =
tmp;<br>&#009;pos++; j--;<br>}<br></i><font color=3D"#000000"><br><font =
color=3D"#000080"><u>&gt; P.S: si', ancora una domanda(prometto che e' =
l'ultima:): a cosa<br>&gt; corrisponde il carattere di =
backspace?<br></u><font color=3D"#000000"><br><b><i>dipende</i></b> da =
quale ambiente stai utilizzando : molti tasti non hanno associato solo =
un valore ASCII, ma vengono rappresentati da un codice esteso; in tutti =
i sistemi ci sono delle funzioni che permettono di accedervi.</p>
</font></font></font></font></font></font></font></font></font></font></f=
ont></font></font></font></font></font></font></font></body></html>
------=_NextPart_000_01BC7F2D.0359BD80--

 e' possibile definire la lunghezza di un array a tempo di esecuzione,
Come ti suggerisce Andrea Ferro, se puoi usa i vector o altre strutture
che ti fornisce la STL. Dovrai fare un certo sforzo per familiarizzarti
con la STL ma ne vale comunque la pena.
Mario
------------------------------------------------------------------------
Mario Graziosi (
mgra...@edizioni-globali.com
)
Professional Developer's Journal (PDJ) - 
http://www.edizioni-globali.com
Tel +39-2-39262284, Fax +39-2-39262186 - Via Algardi 13 - MILANO



grande l'array, basta allocarne uno tramite new.
Grazie...ma ora mi e' sorto un altro dubbio...come posso ottenere la
lunghezza di un array "on the fly"? Mi spiego meglio con un esempio:
voglio passare con un ciclo for tutti gli elementi di un array creato
in base ad una stringa immessa come input; cosa devo mettere come
test? Pensavo a qualcosa come " i < s[] ", ad esempio, ma e'
possibile?
Grazie,
MaNu!

MaNu! wrote:
: Grazie...ma ora mi e' sorto un altro dubbio...come posso ottenere la
: lunghezza di un array "on the fly"? Mi spiego meglio con un esempio:
: voglio passare con un ciclo for tutti gli elementi di un array creato
: in base ad una stringa immessa come input; cosa devo mettere come
: test? Pensavo a qualcosa come " i < s[] ", ad esempio, ma e'
: possibile?
potresti incapsulare l'array in una classe o una struttura che tenga traccia
del numero di elementi (nel momento in cui costruisci l'array devi
necessariamente conoscerne la dimensione).
Paolo

conoscerne le dimensioni a tempo di compilazione.
Io non me ne intendo. ma non si rischia di riempire troppo lo stack?
Comunque, visto che nel C++ si possono dichiarare variabili con molta
liberta', perche' un int array[n] dovrebbe dare errore e int x no?
**************************************      \_/
I'm Mercury Mats                            / \   fan #1 di
 
gluc...@mv.itline.it
     |   |  
**************************************      \_/  Sailor Mercury
Membro del MASSM sezione FADS               -|-
Fan #1 di Artemis e Diana