Creazione Oggetti string
La prima cosa che viene effettuata nella funzione
main() è l'inizializzazione delle stringhe effettuata in tre
modalità diverse:
string parola1 = “Il
gioco”;
string
parola2( “finisce”);
string
parola3(3,'!');
Nella prima linea del gruppo
viene semplicemente creato l'oggetto stringa parola1
utilizzando l'operatore di assegnazione, allo stesso modo delle altre
variabili viste in precedenza. Come risultato, la parola1 è
“Il gioco”. Successivamente vien creata la parola2 ,
l'oggetto string viene inizializzato usando le parentesi della
funzione. Come risultato, parola2 è “finisce”. Infine
viene creata parola3 inserendo in un paio di parentesi un
numero seguito da un carattere. Come risultato la stringa di
parola3 è “!!!”.
Concatenazione degli oggetti
Per creare il successivo oggetto string,
frase, si concatenano i primi tre oggetti string.
string
frase = parola1 + “ ” + parola2 + parola3;
Come risultato si ottiene la seguente frase, “Il
gioco finisce!!!”.
Da notare come l'operatore +, il quale lavora
solitamente con i numeri, possa concatenare anche oggetti string.
Ciò avviene grazie al suo overloading,
che permette di ottenere buoni risultati anche in contesti che non
sono familiari. Overloading degli operatori ridefinisce le operazioni
effettuabili con un operatore conosciuto, in un contesto prima
indefinito. La libreria string
consente quindi di sommare le stringhe tra loro mediante l'operatore
+ definendone la concatenazione degli oggetti.
Uso
della funzione size()
Ora diamo
un'occhiata alle funzioni membro della libreria string, la prossima
ad essere utilizzata è la funzione size().
cout
<< “La frase ha ” << frase.size() << “
caratteri in essa.\n”;
frase.size()
richiama la funzione membro size()
dell'oggetto string
chiamato frase attraverso un operatore di selezione (.). La funzione
size() restituisce un
valore intero privo di segno che corrisponde al numero di caratteri
dell'oggetto string.
Poiché l'oggetto string
è “Il gioco finisce!!!”, il numero di caratteri restituiti è
19. Certamente una stringa diversa restituisce un numero di caratteri
differente.
Indicizzazione
di un Oggetto string
Un oggetto string
è la memorizzazione di una sequenza di caratteri, char. E' possibile
accedere al singolo carattere fornendo il numero di indice mediante
l'operatore []. Come mostrato nell'esempio.
cout
<< “Il carattere in posizione 0:” << frase[0] <<
“\n”;
Il primo elemento
della sequenza ha indice 0. Nella precedente istruzione, frase[0]
ha valore I, e poiché comincia con zero, l'ultimo carattere
nell'oggetto string è
frase[18], anche se vi
sono 19 caratteri in essa.
cout << “Cambiamo
carattere in posizione 0.\n”; frase[0]= 'E';
cout
<< “La frase adesso e':” << frase << “\n”;
E' anche possibile cambiare un singolo carattere
dell'oggetto string usando lo stesso operatore e
riassegnandolo. Dopo aver cambiato in frase il carattere in E, la
frase è quindi diventata “El gioco finisce!!!”.
Iterare con un'oggetto string
Data la nostra conoscenza dei cicli for e
degli oggetti string, è molto semplice elencare i singoli
caratteri di una stringa. Come mostrato di seguito.
for (int j=0; j <
frase.size(); ++j)
cout
<< “Carattere in posizione ” << j << “e': ”
<< frase [j] << endl;
Il ciclo viene ripetuto sino a che la posizione del
carattere sia valida nella stringa frase. Comincia con 0 e
arriva sino a 18. Durante ogni ciclo un carattere dell'oggetto
string viene scritto sullo schermo tramite frase[j].
Usare la funzione find()
Adesso viene mostrata la funzione find() per
controllare se vi siano corrispondenze letterali tra due stringhe ed
il contenuto di frase. Per prima cosa viene controllata la stringa
“finisce”.
cout << “La stringa
'finisce' e' in posizione:” << frase.find(“finisce”) <<
endl;
In questa funzione membro viene restituito il valore
numerico del carattere nel quale la stringa comincia nella stringa
frase. Nel caso di “finisce”, la funzione find()
restituisce un 9. ma cosa succede nel caso che non si sia ritrovata
la stringa da ricercare?
if
(frase.find (“pera”) == string::npos) cout << “'pera' non
si trova nella frase.\n”;
Poiché pera non esiste in frase.find()
questa funzione restituisce una costante speciale definita dalla
libreria string, con la quale avere accesso tramite string::npos.
In questo caso viene mostrata la scritta sullo schermo 'pera' non si
trova nella frase. Informalmente string::npos rappresenta un
numero di posizione inesistente. Ed è il risultato perfetto da
restituire per mostrare che non vi sono ricorrenze tra le due
stringhe.
Usare la funzione erase()
La funzione membro erase() consente di
rimuovere sotto-stringhe parziali da un oggetto string. Un
modo per chiamare questa funzione è specificare il punto d'inizio e
la lunghezza della sotto-stringa.
frase.erase(2,5);
cout
<< “La frase adesso e':” << frase << “\n”;
Un altro modo per richiamare questa funzione è dare
solo la posizione d'inizio della sotto-stringa, in questo modo
saranno eliminati tutti i caratteri successivi a partire dalla
posizione indicata sino alla fine della stringa.
frase.erase(5);
Tuttavia esiste un ultima modalità per richiamare
la funzione erase() priva di argomenti, in questo caso la stringa
viene svuotata completamente. Pertanto frase diventa una stringa
priva di caratteri.
frase.erase();
cout
<< “La frase adesso e':” << frase << “\n”;
Usare la funzione empty()
La funzione membro empty() restituisce
un valore booleano il quale assume true
se l'oggetto string in
questione è privo di caratteri, false
in tutti gli altri casi. Viene utilizzato nel seguente codice:
if
(frase.empty()) cout << “\n La frase e' vuota!\n”;
Poiché frase è stata cancellata, frase.empty
restituisce valore true pertanto sullo schermo viene mostrata
la scritta “La frase e' vuota!”.