Newsgroup: it.comp.lang.c++
Titolo: Stringhe di caratteri di lunghezza indeterminata

Salve a tutto il NG, sono un ragazzo allae prime armi col C++ e ho x le mani
un grosso (x me) intoppo che non so risolvere :
Ho bisogno in un mio programma di  leggere da input o da file (tramite
fscanf del C) una stringa di lunghezza indeterminata ... potenzialmente
infinita ...
Avevo pensato di memorizzare i valori in una semplice var char* str (ad
esempio);
ma siccome non posso inizializzare il puntatore non sapendo a priori  la
dimensione della mia stringa di caratteri, la var memorizzerebbe tutto
nell'heap partendo da un indirizzo "casuale" e andano avanti
sequenzialmente, andando probabilmente, in caso di stringa molto grande, a
"sporcare" aree di mem già utilizzata, con conseguente blocco del sistema o
simile
Ora, avevo pensato di inizializzare la var come stringa di (ad esempio) 10
caratteri, fare un ciclo di letture singole di carattere, per poi, ogni 10
caratteri, inizializzare una nuova stringa di 10 caratteri + grande,
copiarci la stringa precedente x poi deallocare la var precente.
Ma la cosa non piace !!!
Il mio problema è quello di avere una funzione che mi restituisca il numero
di caratteri letti da input SENZA memorizzare questi caratteri in toto e
SENZA che questi vengano persi (altrimenti basterebbe una semplice scanf)
...
da file la cosa è facile : esegui fscanf su ogni carattere fino al
terminatore, conti le fscanf, riporti il file pointer sul 1° carattere della
stringa e esegui di nuovo la fscanf su tutta la stringa memorizzando il
valore in una char* inizializzata come grandezza al valore del contatore
da input invece tutte le funzioni che conosco "distruggono" l'input e quindi
mi è impossibile tornare a passarlo 2 volte senza averlo memorizzato tutto.
Avevo anche pensato di copiare l' input in un file per poi poterci lavorare
tranquillamente come ho detto prima, ma anche questa soluzione non è granchè
...
Come posso fare ???
Esiste qualche funzione adatta ???
Sul mio manuale del C++ (Lipman Lajoie) non ho trovato niente che faccia al
caso mio ...
Forse mi sto dimenticando qualcosa di importante o sto sbagliando qualcosa
???
Grazie x eventuali risposte ...
--
Alex <<< Miro >>> Mirandola

 SENZA che questi vengano persi (altrimenti basterebbe una semplice scanf)
Non li vuoi memorizzare, ma non li vuoi perdere...
...non ho capito.
comunque una volta che hai la tua
   std::string str1;
ti basta chiamare
str1.size();
per sapere quanti caratteri contiene str1
ciao
--
Gerolamo
Using: Win2000 Pro, Borland C++ Compiler 5.5.1
Listening: The Cure - Lullaby

    std::ifstream from_file("prova.txt");
Il fatto č che devo usare una fscanf, secondo le specifiche datemi dal mio
professore ...
Funzionerebbe tutto lo stesso ???
In pratica devo realizzare solamente una classe, e l'input (nome file o
stdin) mi deve essere passato come argomento ... non posso decidere io se
fare da file o da tastiera ... devo farlo su tutti e 2 con lo stesso codice
... e non credo che cin e cout facciano al caso mio ...
In + ... str1.max_size() č un metodo di string vero ???
Come funzionano gli oggetti string ??? Come normali char * ???
Ciao e cmq grazie !!!
--
Alex <<< Miro >>> Mirandola

 Ciao e cmq grazie !!!
ciao
--
Gerolamo

infinita ...
io non ho le conoscenze degli altri (sono un principainte) scusate se
dico sciocchezze ma farei cosě:
copiare il contenuto del file (o di stdin) in un file temporaneo (con
getc putc); calcolare quanti caratteri [n] ha quel file temporaneo  e
passare  n a una funzione che alloca dinamicamente la memoria con un
vettore tipo
*a=(unsigned char *) malloc(n*sizeof(char));
carricare in a il contenuto del file, rimuovi il file temporaneo.
Fine

""" ha scritto:
[...]
il modo migliore per fare quello che chiedi in C++, indipendentemente 
da quel che dice il tuo prof, e' usare gli stream, getline e le stringhe
std::getline(Input, Stringa);
legge da Input fino a trovare un terminatore (definito per ogni OS come 
fine riga) e pone su string l'ingresso. String accetta caratteri fino 
al raggiungimento di un max che trovi come ti e' stato detto
Input basta impostarlo a std::cin o ad un file, e sei a posto

 al caso mio ...
Se é un buon libro(e dicono che lo sia) sicuramente parlerà dei canali di
ingresso/uscita, basta cercare.
Il Ghenio
-----
ZIO : Fun and games are over with. Anyone who dares
get in my way shall perish.
DIO ci salvi dagli ocx del Viral Basic.
-----