La classe string La libreria standard del del C++ definisce la classe string, dichiarata in <string>, per la rappresentazione e manipolazione di stringhe. Tale classe evita agli utilizzatori tutte le problematiche di allocazione e de-allocazione dei buffer di caratteri Laboratorio di Informatica Antonio Monteleone 103
#include <string> La classe string - costruttori // costruisce una stringa vuota string(); // costruisce una copia della data stringa s string( const string& s ); // costruisce una stringa composta da length // caratteri ch string( size_type length, const char& ch ); // costruisce una stringa a partire dalla // c-stringa str. str viene duplicata string( const char* str ); Laboratorio di Informatica Antonio Monteleone 104
La classe string - costruttori // costruisce una stringa a partire dalla // c-stringa str. str viene duplicata // (al massimo length caratteri) string( const char* str, size_type length ); // costruisce una stringa a partire da una // sotto-stringa string( const string& str, size_type index, size_type length ); // costruisce una stringa a partire da un // range di iteratori string(input_iterator start,input_iterator end ); // distruttore ~string(); Laboratorio di Informatica Antonio Monteleone 105
La classe string - costruttori string str1( 6, 'c' ); string str2( "la mia prima stringa" ); string str3( str2, 8, 5 ); Laboratorio di Informatica Antonio Monteleone 106
La classe string lunghezza e capacity // restituiscono il numero di elementi nella stringa size_type length() const; size_type size() const; // restituisce true se la stringa non contiene // elementi, false altrimenti bool empty() const; // restituisce il numero di caratteri che la stringa // può contenere senza che sia necessario allocare // altra memoria size_type capacity() const; // restituisce il massimo numero di elementi che la stringa può contenere size_type max_size() const; Laboratorio di Informatica Antonio Monteleone 107
// modifica in size la dimensione della // stringa void resize(size_type size, const char& val= ); string s1; string s2(""); string s3("this is a string"); Laboratorio di Informatica Antonio Monteleone 108
La classe string - Concatenazione // appendono str alla fine della stringa corrente string& append( const string& str ); string& append( const char* str ); // appende una sotto-stringa che parte alla posizione index e di lunghezza len string& append( const string& str, size_type index, size_type len ); // appende num caratteri di str alla fine della stringa string& append( const char* str, size_type num ); // appende num copie del carattere ch alla fine // della stringa string& append( size_type num, char ch ); Laboratorio di Informatica Antonio Monteleone 109
La classe string - Concatenazione // appende la sequenza [start, end) alla // fine della stringa string& append( input_iterator start, input_iterator end ); string operator+(const string& s1,const string& s2 ); string operator+(const char* s, const string& s2 ); string operator+( char c, const string& s2 ); string operator+( const string& s1, const char* s ); string operator+( const string& s1, char c ); Laboratorio di Informatica Antonio Monteleone 110
La classe string - confronto //confronta la stringa corrente con str // Il valore 0 indica che le due stringhe sono uguali // Un valore < 0 indica che this precede str // nell'ordinamento lessicografico // Un valore > 0 indica che this segue str // nell'ordinamento lessicografico int compare( const string& str ); int compare( const char* str ); int compare( size_type index, size_type length, const string& str ); int compare( size_type index, size_type length, const string& str, size_type index2, size_type length2 ); int compare( size_type index, size_type length, const char* str, size_type length2 ); Laboratorio di Informatica Antonio Monteleone 111
La classe string - confronto bool operator==(const string& c1, const string& c2); bool operator!=(const string& c1, const string& c2); bool operator<(const string& c1, const string& c2); bool operator>(const string& c1, const string& c2); bool operator<=(const string& c1, const string& c2); bool operator>=(const string& c1, const string& c2); // conta gli elementi di names che precedono il valore di name string names[] = {"Antonio", "Luca", "Giacomo", "Anastasia", "Manuela"}; string name = "Gianni"; int count = 0; for(int i=0; i<5; i++ ) { if (names[i]<name) // if (names[i].compare(name) < 0) count++; } Laboratorio di Informatica Antonio Monteleone 112
La classe string accesso agli elementi // accede all'elemento index della stringa char& operator[]( size_type index ); // restituisce un riferimento all'elemento di posto loc // contrariamente a operator[] effettua un controllo sui // limiti della stringa sollevando un eccezione out_of_range char& at( size_type loc ); const char& at( size_type loc ) const; // restituisce la posizione della prima occorrenza di \ string::size_type pos = 0; string s="c:\\temp"; string::size_type l = s.length(); for (int i=0; i<l; ++i) if (s[i] == '\\') { pos = i; break; } Laboratorio di Informatica Antonio Monteleone 113
La classe string - inserimento // inseriscono str nella stringa corrente, nella posizione // index, string& insert( size_type index, const string& str ); string& insert( size_type index, const char* str ); // inserisce una sottostringa di str (che parte a index2 e // lunga num caratteri) nella stringa corrente, nella // posizione index1, string& insert( size_type index1, const string& str, size_type index2, size_type num ); // inserisce num caratteri di str nella stringa corrente, // nella posizione index string& insert( size_type index, const char* str, size_type num); // inserisce num copie di ch nella posizione index string& insert( size_type index, size_type num, char ch ); Laboratorio di Informatica Antonio Monteleone 114
Estrazione di una sottostringa // restituisce una sottostringa della stringa corrente, // a partire dalla posizione index e lunga length // caratteri string substr( size_type index, size_type length = npos ); Laboratorio di Informatica Antonio Monteleone 115
Cancellazione di una sottostringa // rimuove num caratteri dalla stinga corrente, //a partire dalla posizione index, e restituisce *this. string& erase( size_type index = 0, size_type num = npos ); Laboratorio di Informatica Antonio Monteleone 116
Sostituzione di una sottostringa // sostituisce, a partire dalla posizione index nella // stringa corrente, un massimo di num caratteri di str string& replace( size_type index, size_type num, const string& str ); // sostituisce, a partire dalla posizione index1 nella // stringa corrente, un massimo di num1 caratteri con // un massimo di num2 caratteri presi da str a partire // dalla posizione index2 string& replace( size_type index1, size_type num1, const string& str, size_type index2, size_type num2 ); Laboratorio di Informatica Antonio Monteleone 117
Ricerca di una sottostringa // restituiscono la posizione della prima occorrenza di str nella // stringa corrente a partire dalla posizione index restituisce // string::npos se str non è stata trovata size_type find( const string& str, size_type index ); size_type find( const char* str, size_type index ); // restituisce la posizione della prima occorrenza dei primi length // caratteri di str nella stringa corrente a partire dala posizione // index, resituisce string::npos se i caratteri non sono stati // trovati size_type find(const char* str, size_type index, size_type length ); // restituisce la posizione della prima occorrenza del carattere ch // nella stringa corrente a partire dala posizione index, // restituisce string::npos se ch non è stato trovato size_type find( char ch, size_type index ); Laboratorio di Informatica Antonio Monteleone 118
Ricerca di una sottostringa // come find, ma facendo una ricerca a ritroso a partire dalla posizione index size_type rfind( const string& str, size_type index ); size_type rfind( const char* str, size_type index ); size_type rfind( const char* str, size_type index, size_type num ); size_type rfind( char ch, size_type index ); // restituisce l'indice del primo carattere nella stringa corrente // che corrisponde a uno dei caratteri in str. La ricerca inizia // alla posizione index. Viene restituito string::npos se la ricerca // fallisce size_type find_first_of( const string &str, size_type index = 0 ); size_type find_first_of( const char* str, size_type index = 0 ); // il confronto si limita ai primi num caratteri di str size_type find_first_of( const char* str, size_type index, size_type num ); // viene cercato solo il carattere ch size_type find_first_of( char ch, size_type index = 0 ); Laboratorio di Informatica Antonio Monteleone 119
Ricerca di una sottostringa size_type find_last_of( const string& str, size_type index = npos ); size_type find_last_of( const char* str, size_type index = npos ); size_type find_last_of( const char* str, size_type index, size_type num ); size_type find_last_of( char ch, size_type index = npos ); size_type find_first_not_of( const string& str, size_type index = 0 ); size_type find_first_not_of( const char* str, size_type index = 0 ); size_type find_first_not_of( const char* str, size_type index, size_type num ); size_type find_first_not_of( char ch, size_type index = 0 ); size_type find_last_not_of( const string& str, size_type index = npos ); size_type find_last_not_of( const char* str, size_type index = npos); size_type find_last_not_of( const char* str, size_type index, size_type num ); size_type find_last_not_of( char ch, size_type index = npos ); Laboratorio di Informatica Antonio Monteleone 120