Newsgroup: it.comp.lang.c++
Titolo: In quanti modi si possono gestire le stringhe in C++?

Ciao e buon Natale *<:o)>>>
in altro thread si parlava di gestione delle
stringhe in C++ e la cosa mi ha fatto sorgere
spontanee alcune domande...
In C++, a quanto ne so, le stringhe si possono
manipolare in tre modi: con gli stream, con le
funzioni solite della libreria C (sprintf(), strcmp(),
strcpy() ecc.ecc.) e con le std::string.
(A parte, ovviamente, il manipolarle a manina...)
Ma quale è il modo "standard" consigliato? Cioè,
qual'è il modo che mi garantisce la massima
portabilità fra compilatori C++ e la minima
quantità di problemi?
E ci sono casini se uno li usa tutti e tre nello
stesso programma? L'includere gli header per tutti
e tre i gruppi di funzioni dà molte noie o fila
tutto liscio e i tre sistemi lavorano insieme
d'amore e d'accordo?

 d'amore e d'accordo?
Fintanto che non combini le cose (cominci ad usare le std::string con 
funzioni di <cstring>, ecc...) non dovresti aver alcun problema. 
Ovviamente, e' sempre preferibile non mischiare le cose, se non serve.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 Ovviamente, e' sempre preferibile non mischiare le cose, se non serve.
Ecco, appunto... fintanto che uno non combina le cose :-)
E se uno si mettesse a combinarle invece?
Cosa si deve aspettare? A cosa deve stare attento? :-)

 (sprintf(), strcmp(), strcpy() ecc.ecc.) e con le std::string.
std::string e` il tipo delle stringhe, non e` un modo per manipolarle.
"manipoalre stringhe" e "manipolare std::string" e esattamente la
stessa cosa.
Nessuna funzione della libreria C manipola le stringhe, il C non ha
un tipo stringa e usa invece array di caratteri terminati da '\0'.
Le funzioni di <cstring> (strcmp, strlen, ...) servono per gli array
di caratteri e non per le stringhe.
Gli stream servono per l'I/O, e possono fare anche I/O su stringhe, ma
non li definirei un modo per manipolare le stringhe
        Mauro

 Vabbè, ci sono gli strstream che servono a quello...
Gli strstream servono per gli array, non per le stringhe, e sono
deprecati.
Per le stringhe ci sono stringstream e simili (in <sstream>).
        Mauro

 Per le stringhe ci sono stringstream e simili (in <sstream>).
...Ma non sono la stessa cosa?
In che senso "per gli array"?

 non li definirei un modo per manipolare le stringhe
Eh ma che pignolo che sei...
le mie perplessità erano sulla più o meno buona
gestione delle strighe, non sulla grammatica del
linguaggio: quindi la tua, per dirla con le tue
stesse parole, non la definirei una risposta :-)

 In che senso "per gli array"?
Nel senso che gli strstream leggono/scrivono su array.
        Mauro

bouna gestione delle stringhe....
Quali stringhe? std::string o le C-like?
Tommy

 d'amore e d'accordo?
Se ti serve almeno un array di caratteri, almeno una stringa e almeno uno
stream, puoi tranquillamente utilizzarli nel contempo. Ricorda sempre che
hai dati di natura diversa, non sono tutte "stringhe", secondo me sei un pò
confuso.
Per questo motivo di do la seguente regola pratica: se devi lavorare con
stringhe nei tuoi programmi, usa std::string ! Non pensarci due volte.

 Quali stringhe? std::string o le C-like?
Il tipo che quando le stampi a video o sulla stampante
ti viene fuori la scritta che ci hai messo dentro...
te lo dicevo che sei pignolo :-)
Riformulo la domanda: qual'è il modo migliore/consigliato
per gestire il testo in C++?

 per gestire il testo in C++?
std::string, questa porta spesso a meno errori rispetto alle stringe C-Like.
Cercare di evitare errori, specialmente per i principianti come te e'
indispensabile.
Tommy