La libreria <string> del C++ mette a disposizione il tipo std::string,
cioe una stringa "vera", molto piu comoda e sicura rispetto ai classici array di char.
Con std::string possiamo leggere, modificare, concatenare e analizzare testi in modo semplice.
1️⃣ Perche usare std::string invece di char[]
In C esistevano solo le stringhe come array di char terminati da \0:
char nome[20] = "Mario";
In C++ possiamo usare std::string:
#include <string>
#include <iostream>
using namespace std;
int main() {
string nome = "Mario";
cout << nome;
}
Vantaggi di std::string:
- gestisce automaticamente la lunghezza della stringa
- offre molte funzioni gia pronte (length, substr, find...)
- evita facilmente errori di memoria tipici degli array di char
2️⃣ Creazione e assegnazione di stringhe
Alcuni modi per dichiarare e assegnare una stringa:
string s1 = "Ciao";
string s2("Mondo");
string s3;
s3 = s1 + " " + s2; // concatenazione
cout << s3; // stampa "Ciao Mondo"
Possiamo usare l operatore + per concatenare stringhe e += per aggiungere testo in coda.
string frase = "Ciao";
frase += " a tutti";
3️⃣ Lunghezza della stringa: length() e size()
Per conoscere il numero di caratteri di una stringa si usano length() o size()
(le due funzioni fanno la stessa cosa):
string parola = "Programmazione";
cout << "Lunghezza: " << parola.length() << endl;
cout << "Lunghezza: " << parola.size() << endl;
In questo esempio la lunghezza e 13.
4️⃣ Accesso ai caratteri: operator[] e at()
Possiamo accedere ai singoli caratteri come in un array:
string testo = "Ciao";
cout << testo[0]; // stampa C
cout << testo[1]; // stampa i
Oppure usare at(), che fa un controllo di sicurezza sull indice:
cout << testo.at(2); // stampa a
5️⃣ Input di stringhe: cin e getline()
Con cin si legge solo fino al primo spazio:
string nome;
cin >> nome; // se inserisco "Mario Rossi" legge solo "Mario"
Per leggere una riga completa, inclusi gli spazi, si usa getline():
string nomeCompleto;
getline(cin, nomeCompleto); // legge tutta la riga, spazi inclusi
getline e stato usato cin, potrebbe rimanere
un carattere di fine riga nel buffer. Spesso si usa cin.ignore() prima di getline.
6️⃣ Funzioni utili: substr(), find(), erase(), insert()
La libreria <string> offre molte funzioni utili.
substr(): estrarre una parte di stringa
string testo = "Programmare in C++";
string parola = testo.substr(0, 11); // da posizione 0, lungo 11 caratteri
cout << parola; // "Programmare"
find(): cercare una sottostringa
string frase = "Benvenuto nel corso di C++";
size_t pos = frase.find("corso");
if (pos != string::npos) {
cout << "Trovato alla posizione: " << pos;
} else {
cout << "Non trovato";
}
erase() e insert(): modificare il contenuto
string s = "Ciao mondo";
// cancella 5 caratteri a partire dalla posizione 4
s.erase(4, 5); // ora s contiene "Ciao"
// inserisce " a tutti" alla fine
s.insert(s.length(), " a tutti"); // "Ciao a tutti"
7️⃣ Conversione da stringa a numero: stoi(), stof()
Spesso si legge un numero come stringa e poi lo si converte in intero o float:
#include <string>
string s = "123";
int n = stoi(s); // converte in intero
string s2 = "3.14";
float f = stof(s2); // converte in float
Se il contenuto della stringa non e un numero valido, la conversione puo generare un errore.
📚 Tabella delle principali funzioni della libreria <string>
La classe std::string mette a disposizione numerose funzioni per gestire, analizzare e modificare testi.
La seguente tabella riassume le funzioni più utilizzate nelle esercitazioni e nei programmi reali.
| Categoria | Funzione | Descrizione | Esempio |
|---|---|---|---|
| Informazioni sulla stringa | size() |
Restituisce il numero di caratteri | s.size() |
length() |
Identico a size() | s.length() |
|
empty() |
Restituisce true se la stringa è vuota | s.empty() |
|
capacity() |
Memoria allocata in buffer | s.capacity() |
|
max_size() |
Massima dimensione possibile | s.max_size() |
|
| Accesso ai caratteri | operator[] |
Accede al carattere senza controllo bounds | s[0] |
at() |
Accede con controllo bounds | s.at(1) |
|
front() |
Primo carattere | s.front() |
|
back() |
Ultimo carattere | s.back() |
|
| Modifica della stringa | append() |
Aggiunge testo alla fine | s.append("ciao") |
push_back() |
Aggiunge un carattere | s.push_back('a') |
|
pop_back() |
Rimuove l'ultimo carattere | s.pop_back() |
|
insert() |
Inserisce testo o caratteri | s.insert(5, "ciao") |
|
erase() |
Rimuove caratteri dalla stringa | s.erase(2, 3) |
|
replace() |
Sostituisce parte della stringa | s.replace(0, 4, "Hello") |
|
clear() |
Svuota la stringa | s.clear() |
|
resize() |
Cambia la lunghezza della stringa | s.resize(20) |
|
reserve() |
Riserva capacità in memoria | s.reserve(50) |
|
| Ricerca e analisi | find() |
Trova una sottostringa | s.find("ciao") |
rfind() |
Trova da destra | s.rfind("a") |
|
find_first_of() |
Trova il primo carattere tra un set | s.find_first_of("aeiou") |
|
find_last_of() |
Trova l'ultimo carattere tra un set | s.find_last_of("0123456789") |
|
find_first_not_of() |
Primo carattere non appartenente al set | s.find_first_not_of(" ") |
|
find_last_not_of() |
Ultimo carattere non appartenente al set | s.find_last_not_of(" ") |
|
compare() |
Confronta due stringhe | s.compare("test") |
|
| Estrazione testo | substr() |
Ritorna una sottostringa | s.substr(0,5) |
copy() |
Copia parte della stringa in un array di char | s.copy(arr, 5) |
|
c_str() |
Ritorna una stringa C-style (char*) | s.c_str() |
|
| Conversioni | stoi() |
String → int | stoi("123") |
stol() |
String → long | stol("123") |
|
stof() |
String → float | stof("3.14") |
|
stod() |
String → double | stod("3.14159") |
LABORATORIO
Primi passi con la libreria string
In questo laboratorio utilizzerai std::string per leggere,
analizzare e modificare testi.
Imparerai a usare le funzioni piu importanti: length, substr,
find, insert ed erase.
- Ambiente di sviluppo C++
- Libreria
<string>e<iostream>
1 Lettura del nome completo
Scrivi un programma che legge il nome completo di una persona (nome e cognome) usando getline
e ne stampa il contenuto e la lunghezza.
#include <iostream>
#include <string>
using namespace std;
int main() {
string nomeCompleto;
cout << "Inserisci il tuo nome completo: ";
getline(cin, nomeCompleto);
cout << "Hai inserito: " << nomeCompleto << endl;
cout << "Lunghezza: " << nomeCompleto.length() << endl;
return 0;
}
2 Concatenazione di stringhe
Chiedi all utente nome e cognome in due stringhe separate, poi crea una terza stringa che li unisce con uno spazio in mezzo.
string nome, cognome;
cout << "Nome: ";
cin >> nome;
cout << "Cognome: ";
cin >> cognome;
string completo = nome + " " + cognome;
cout << "Nome completo: " << completo << endl;
3 Ricerca di una parola
Scrivi un programma che legge una frase e una parola, poi verifica se la parola e contenuta nella frase usando find().
string frase, parola;
cout << "Inserisci una frase: ";
cin.ignore(); // se necessario per pulire il buffer
getline(cin, frase);
cout << "Inserisci una parola da cercare: ";
cin >> parola;
size_t pos = frase.find(parola);
if (pos != string::npos) {
cout << "Parola trovata alla posizione: " << pos << endl;
} else {
cout << "Parola non trovata" << endl;
}
4 Esercizi aggiuntivi
- Leggi una frase e stampala tutta in maiuscolo (usando
touppersu ogni carattere). - Chiedi all utente una password e verifica che abbia almeno 8 caratteri.
- Estrarre i primi 5 caratteri di una stringa usando
substr. - Sostituire una parola in una frase usando
find,eraseeinsert.