Descrizione
Definizione
Assegnazione
Lunghezza
Stringhe di tipo C
I/O
Descrizione
Le stringhe sono sequenze di caratteri, generalmente utilizzate per
rappresentare parole e frasi, eventualmente contenenti dati numerici rappresentati
tramite i corrispondenti caratteri numerici.
In c++ si puo' indicare tale sequenza di caratteri
racchiudendola tra doppi apici:
"questa e' una stringa"
Tecnicamente questa entita' viene detta string
literal e viene considerata una sequenza (array) di const char,
i cui elementi hanno per valore (non modificabile) il numero che nella
codifica ASCII corrisponde al carattere relativo (vedi C-strings).
Questo tipo (string literal) puo' essere utilizzato
per la definizione di una sequenza di caratteri nota, ma ha dei limiti,
quali l'impossibilita' di modificarne e di manipolarne il contenuto.
La libreria standard del c++ definisce una classe
opportuna per trattare le stringhe, di nome string. Tramite questa
classe e' possibile effettuare operazioni di manipolazione delle stringhe,
quali l'assegnazione, la ricerca di substring, il confronto, l'aggunta
di caratteri, la concatenazione etc.
Dichiarazione
di variabili di tipo string
Per poter dichiarare ed utilizzare variabili
di tipo string e' necessario includere il file che definisce la classe
stessa:
#include <string>
La dichiarazione di una variabile di tipo string si esegue in modo analogo alla dichiarazione delle variabili di tipo nativo:
string s;
Assegnazione
L'assegnazione di un valore ad una variabile
di tipo stringa puo' essere fatta nei seguenti modi:
string s1,s2;
s1 = "valore della stringa"
// assegnazione tramite string literal
s2 = s1;
// assegnazione tramite copia di s1
L'assegnazione puo' essere eseguita anche al momento della definizione della variabile:
string s = "valore della stringa";
string s1("altro valore");
string s2 = s1;
// assegna ad s2 lo stesso valore di s1
Lunghezza
delle stringhe
E' possibile ricavare la lunghezza di una stringa, cioe' il numero
di caratteri di cui e' composta, tramite le due istruzioni equivalenti:
string s = "Ciao, mondo";
int len = s.length();
// assegna alla variabile len il valore 11
int len2 = s.size();
// istruzione equivalente
Stringe di
tipo
C (C-style strings)
In C le stringhe sono gestite tramite array di char o unsigned char.
Il contenuto degli elementi dell'array sara' il valore numerico che, secondo
la codifica ASCII, e' associato al corrispondente
carattere della stringa.
Per convenzione, la stringa viene terminata con un char di valore 0
(NUL), che si chiama terminatore; per questo motivo, per definire una stringa
di lunghezza len, si dovra' allocare un array di len+1 char o unsigned
char, in modo da riservare lo spazio per il terminatore.
char buffer[12] = "Ciao, mondo"; // ad es., buffer[0] vale 'C', buffer[11] vale 0.
Benche' la gestione delle stringhe tramite la classe string sia completa, molte funzioni di libreria richiedono come parametro una stringa di tipo C (ad esempio la open() per aprire un file). Per poter ottenere questo da una variabile di tipo stringa, va utilizzata l'istruzione seguente:
string file = "dati.dat";
// definisco la variabile di tipo string
infile input;
// definisco la variabile per aprire un file in lettura
input.open(file.c_str());
// istruzione per aprire il file, che vuole come parametro una C-style
string
I/O di stringe
da/verso streams
L'input e l'output delle stringhe da e verso stream (iostream, fstream,
etc.) si attua in modo analogo a quello per gli altri tipi di variabile:
string s;
cin >> s;
// leggo una stringa da terminale
cout << s;
// scrivo una stringa su terminale
ifstream iFile;
iFile.open("<nome del file>");
iFile >> s;
// leggo una stringa da file
Va ricordato che la concatenazione sugli stream utilizza come separatori sia il NL (ritorno a capo) che il blank (spazio); questo significa che se, eseguendo l'esempio appena visto, si digita sul terminale la riga
ciao, mondo
la variabile s assumera' valore "ciao,". Per poter leggere tutta una riga (fino al ritorno a capo) da un input stream (ad esempio, cin, o una variabile di tipo ifstream), si puo' usare l'istruzione
getline(cin, s);
getline(iFile, s); // dove iFile
e' la ifstream definita prima
in questo caso la variabile s assumera' il valore "ciao, mondo".