In realtà il tipo string è una classe, ma dal momento che non sappiamo ancora niente della programmazione ad oggetti, lo tratteremo come un comune tipo.
Ricordate a cosa serve la direttiva del preprocessore #include?
Per poter utilizzare le utility per la gestione dell'input/output (cin, cout, endl) abbiamo dovuto includere il file iostream.
Allo stesso modo ora, per poter utilizzare la classe string, dobbiamo includere la libreria string:
#include <string>
La classe string è inclusa anch'essa nel namespace std. Ricordate cosa implica questo?
O usiamo la forma esplicita:
#include <string>
int main()
{
std::string miaStringa;
...
O usiamo la forma implicita, e in questo caso dovremo utilizzare la direttiva using:
#include <string>
using namespace std; //rende inplicito std::
int main()
{
string miaStringa; //non è più necessario aggiungere std::
...
O ancora meglio:
#include <string>
using std::string; //rende inplicito std:: ma solo per string
int main()
{
string miaStringa; //non è più necessario aggiungere std::
...
Una volta dichiarata, una variabile di tipo string funziona esattamente come ogni altro tipo di variabile.
Questo significa che può anche essere inizializzata:
string miaStringa = "inizializziamola!";
Per assegnare un valore ad una variabile di tipo string, si fa esattamente come con le altre variabili:
miaStringa = "ora contieni me";
E' possibile anche concatenare più stringhe, e cioé sommare due stringhe di partenza per formare un'unica stringa come risultato:
string stringaIniziale1 = "mi presento, ";
string stringaIniziale2 = "mi chiamo Pietro";
string stringaFinale = stringaIniziale1 + stringaIniziale2;
cout << stringaFinale;
Stamperà a schermo:
/>mi presento, mi chiamo Pietro
E' anche possibile aggiungere una stringa al contenuto di una variabile string, utilizzando l'operatore += :
string stringa1 = "ciao ";
stringa1 = "buona sera "; //sovrascrive il contenuto di stringa1
stringa1 += "come va?"; //aggiunge "come va?" a "buona sera"
Che è l'equivalente di:
stringa1 = stringa1 + "come va?";
Ma è senz'altro più comodo.
Così come nelle altre variabili, possiamo assegnare ad una variabile string, il contenuto di un'altra variabile string:
string frase1 = "l'erba del vicino";
string frase2;
frase2 = frase1; //ora frase2 conterrà anch'essa "l'erba del vicino"
Purtroppo questo metodo non funziona nell'esecuzione del miracolo della moltiplicazione dell'erba :)
Ma torniamo a noi. Ovviamente una variabile di tipo string può ricevere un input da tastiera tramite cin:
#include <iostream> //rende disponibile cin e coutHo inserito lo spazio vuoto tra doppi apici nell'ultimo cut, fra varNome e varCognome, altrimenti il programma avrebbe stampato nome e cognome attaccati.
#include <string> //rende disponibile string
using namespace std; //in alternativa aggiungiamo solo cin, cout, endl e string
int main()
{
string varNome;
string varCognome;
cout << "inserisci il tuo nome: " << endl;
cin >> varNome;
cout << "inserisci il tuo cognome: " << endl;
cin >> varCognome;
cout << "ti chiami: " << varNome << " " << varCognome << endl;
return 0;
}
Una funzione che ci può tornare utile nei nostri programmi è size(), che restituisce la lunghezza di una stringa. Si utilizza nel modo seguente:
string mioNome = "pietro";
int grandezza;
grandezza = mioNome.size();
La funzione size() restituisce la lunghezza della stringa contenuta in mioNome, che viene salvata nella variabile grandezza.
Non vi preoccupate se per adesso non capite l'uso del punto . è una sintassi utilizzata per accedere ai membri di un oggetto.
Per ora vi basti sapere che il compilatore, sapendo che mioNome è un oggetto di tipo string, capisce automaticamente che .size() si riferisce alla funzione appartenente alla classe string.
Per questo non bisogna includere il namespace.
Infine è ormai chiaro che è del tutto legittimo creare un array di tipo string:
string dati[4];
dati[0] = "Maria";
dati[1] = "de Fumaioli";
dati[2] = "via Prato Fiorito";
dati[3] = "Padova";
Vedete com'è infinitamente più semplice rispetto al metodo utilizzato dal linguaggio C?
Prima di chiudere però vi faccio notare una cosa: un array come quello appena utilizzato può contenere solo dati di tipo string.
In generale ogni array può contenere solo dati del tipo utilizzato durante la dichiarazione.
Ma se ad esempio, ai dati di sopra volessimo aggiungere un quinto elemento di tipo float per memorizzare il reddito di Maria?
Non possiamo, a meno che non lo scriviamo sottoforma di stringa, ad esempio "20000"; ma in questo modo il dato viene trattato come una stringa composta da caratteri numerici, e non come un valore numerico.
A tale scopo ci vengono incontro le strutture (da non confondere con le strutture di controllo) di cui parleremo nel prossimo post.
Nessun commento:
Posta un commento