sabato 13 ottobre 2012

L'oggetto String II

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!”.

Nessun commento:

Posta un commento