8.5 Stringhe
Il C++, contrariamente ad altri linguaggi di programmazione, non definisce nativamente un tipo stringa
(come avviene ad esempio in Java). Le stringhe tradizionali in C vengono assimilate ad un
array di caratteri terminato dal carattere speciale '\0', detto “terminatore di stringa”.
Vediamo un semplice programma che mostra tre metodi per inizializzare una stringa:
Programma in stile C (array di char)
/*
* Un semplice programma che mostra
* l'uso delle stringhe
*/
#include <iostream.h>
using namespace std;
int main() {
char stringa1[6];
char stringa2[6];
// assegnamento del valore della stringa3 in fase di dichiarazione
char stringa3[5] = "nave";
// inizializzazione manuale della stringa1
stringa1[0] = 'p';
stringa1[1] = 'a';
stringa1[2] = 'l';
stringa1[3] = 'l';
stringa1[4] = 'a';
stringa1[5] = '\0';
// immissione da tastiera del valore di stringa2
cin >> stringa2;
cout << "stringa1: " << stringa1 << "\n";
cout << "stringa2: " << stringa2 << "\n";
cout << "stringa3: " << stringa3 << "\n";
return 0;
}
Output atteso:
palla
pippo (supponendo che l'utente inserisca "pippo")
nave
Nota didattica:
con gli array di caratteri occorre sempre ricordare di terminare le stringhe con '\0'.
Questo approccio è più “basso livello” ma permette un maggiore controllo sulla memoria.
Stringhe come oggetti in C++
Il C++ moderno fornisce la libreria <string>, che definisce una classe string.
Le stringhe diventano quindi oggetti, dotati di metodi e operatori per la gestione testuale.
Esempio base con oggetti string
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1 = "Questa è una stringa";
string s2("in C++");
cout << s1 << endl;
cout << s2;
}
Con le string possiamo usare metodi come size(), at(), append(), substr(),
find(), insert(), erase() e replace().
Esempi di operazioni
Concatenazione
string s1="Alfa";
string s2="Beta";
s1 = s1 + s2;
cout << s1; // AlfaBeta
Accesso ai caratteri
string s="Lambda";
for(int i=0;i<s.size();i++)
cout << s.at(i) << " ";
Ricerca e sostituzione
string frase="Mangiare la mela fa bene";
cout << frase.find("mela"); // 12
frase.replace(12,4,"pera");
cout << frase; // Mangiare la pera fa bene
Confronto tra approcci
- C (array di char): più vicino all’hardware, richiede attenzione a dimensioni e terminatori, funzioni da
<string.h>. - C++ (classe string): più semplice e sicuro, offre metodi potenti e riduce i rischi di errori di buffer.
Osservazione didattica: È utile far vedere agli studenti entrambi i modelli.
Quello “C” mostra come le stringhe siano realmente salvate in memoria,
quello “C++” introduce la programmazione a oggetti e semplifica il lavoro pratico.
Molti errori tipici (buffer overflow, mancanza di terminatore) si evitano con l’uso della classe string.