Guide alle stringhe C++: Una guida amichevole per i principianti
Ciao futuro superprogrammatore! Come insegnante di scienze informatiche con anni di esperienza, sono entusiasta di portarti in un viaggio attraverso il meraviglioso mondo delle stringhe C++. Non preoccuparti se non hai mai scritto una riga di codice prima – inizieremo dal principio e procederemo insieme. Alla fine di questa guida, sarai in grado di gestire le stringhe come i migliori! (Mi scuso, non ho resistito a un piccolo gioco di parole per iniziare!)

La stringa a stile C
Iniziamo con il "nonno" di tutte le stringhe in C++: la stringa a stile C. Queste stringhe sono un retaggio del linguaggio C, ma è importante comprenderle anche in C++.
Cos'è una stringa a stile C?
Una stringa a stile C è essenzialmente un array di caratteri che termina con un carattere speciale chiamato terminatore nullo (\0). Questo terminatore nullo indica al computer dove finisce la stringa.
Ecco un esempio semplice:
char saluto[] = "Ciao";
In questo caso, saluto è effettivamente un array di 6 caratteri: {'C', 'i', 'a', 'o', '\0'}.
Lavorare con le stringhe a stile C
Esaminiamo alcune operazioni comuni con le stringhe a stile C:
- Dichiarazione e inizializzazione:
 
char nome[20] = "Alice";  // Dichiarazione di una stringa con un massimo di 19 caratteri (più il terminatore nullo)
char citta[] = "New York"; // La dimensione viene determinata automaticamente
- Input e output:
 
#include <iostream>
#include <cstring>
int main() {
char cibo[50];
std::cout << "Qual è il tuo cibo preferito? ";
std::cin.getline(cibo, 50);
std::cout << "Ah, " << cibo << " sembra delizioso!" << std::endl;
return 0;
}
In questo esempio, utilizziamo cin.getline() per leggere una linea di input intera, inclusi gli spazi.
- Manipolazione delle stringhe:
 
Le stringhe a stile C possono essere manipulate utilizzando funzioni dalla libreria <cstring>. Ecco alcune comuni:
| Funzione | Descrizione | Esempio | 
|---|---|---|
strlen() | 
Ottenere la lunghezza della stringa | int len = strlen(nome); | 
strcpy() | 
Copiare una stringa in un'altra | strcpy(dest, src); | 
strcat() | 
Concatenare stringhe | strcat(str1, str2); | 
strcmp() | 
Confrontare stringhe | int risultato = strcmp(str1, str2); | 
Ecco un piccolo programma che utilizza queste funzioni:
#include <iostream>
#include <cstring>
int main() {
char nome1[20] = "Giovanni";
char cognome[20] = "Doe";
char nome_completo[40];
std::cout << "Lunghezza del nome: " << strlen(nome1) << std::endl;
strcpy(nome_completo, nome1);
strcat(nome_completo, " ");
strcat(nome_completo, cognome);
std::cout << "Nome completo: " << nome_completo << std::endl;
if (strcmp(nome1, cognome) == 0) {
std::cout << "Il nome e il cognome sono uguali!" << std::endl;
} else {
std::cout << "Il nome e il cognome sono diversi." << std::endl;
}
return 0;
}
Questo programma dimostra il calcolo della lunghezza della stringa, la copia, la concatenazione e il confronto. Molto interessante, vero?
La classe String in C++
Ora, passiamo al modo più moderno e conveniente di gestire le stringhe in C++: la classe std::string.
Introduzione a std::string
La classe std::string fa parte della libreria standard C++ e offre un modo molto più user-friendly per lavorare con le stringhe. Gestisce automaticamente la gestione della memoria e offre una serie di funzioni membro utili.
Per utilizzare std::string, è necessario includere l'intestazione <string>:
#include <string>
Creazione e utilizzo degli oggetti std::string
Ecco alcuni esempi:
- Dichiarazione e inizializzazione:
 
std::string saluto = "Ciao, mondo!";
std::string nome("Alice");
std::string stringa_vuota;  // Crea una stringa vuota
- Input e output:
 
#include <iostream>
#include <string>
int main() {
std::string colore_preferito;
std::cout << "Qual è il tuo colore preferito? ";
std::getline(std::cin, colore_preferito);
std::cout << "Ah, " << colore_preferito << " è un colore meraviglioso!" << std::endl;
return 0;
}
Notare come utilizziamo std::getline() per leggere una linea di input intera, inclusi gli spazi.
- Operazioni sulle stringhe:
 
La classe std::string offre molte funzioni membro utili. Ecco alcune comuni:
| Funzione | Descrizione | Esempio | 
|---|---|---|
length() o size()
 | 
Ottenere la lunghezza della stringa | int len = str.length(); | 
empty() | 
Controllare se la stringa è vuota | if (str.empty()) { ... } | 
append() o +=
 | 
Aggiungere alla stringa | 
str.append(" Mondo"); o str += " Mondo";
 | 
substr() | 
Ottenere una sottostringa | std::string sub = str.substr(0, 5); | 
find() | 
Trovare una sottostringa | size_t pos = str.find("ciao"); | 
replace() | 
Sostituire una parte della stringa | str.replace(0, 5, "Ciao"); | 
Ecco un programma che utilizza queste funzioni:
#include <iostream>
#include <string>
int main() {
std::string frase = "Il rapido fox marrone salta sopra il cane pigro";
std::cout << "Lunghezza della frase: " << frase.length() << std::endl;
if (!frase.empty()) {
std::cout << "La frase non è vuota." << std::endl;
}
frase += "!";  // Aggiunge un punto esclamativo
std::cout << "Frase aggiornata: " << frase << std::endl;
std::string sub = frase.substr(4, 5);  // Ottiene "rapido"
std::cout << "Sottostringa: " << sub << std::endl;
size_t fox_pos = frase.find("fox");
if (fox_pos != std::string::npos) {
std::cout << "Trovato 'fox' alla posizione: " << fox_pos << std::endl;
}
frase.replace(fox_pos, 3, "gatto");
std::cout << "Dopo la sostituzione: " << frase << std::endl;
return 0;
}
Questo programma dimostra diverse operazioni sulle stringhe come ottenere la lunghezza, controllare se è vuota, aggiungere, estrarre una sottostringa, trovare e sostituire.
Confronto tra stringhe a stile C e std::string
Mentre le stringhe a stile C sono ancora utilizzate in alcuni contesti (specialmente quando si interfaccia con il codice C), std::string è generalmente preferita in C++ moderno per diversi motivi:
- Gestione automatica della memoria
 - Più sicura e facile da usare
 - Operazioni più convenienti (come la concatenazione con l'operatore 
+) - Set ricco di funzioni membro
 
Ecco una rapida comparazione:
// Stringa a stile C
char cstr1[20] = "Ciao";
char cstr2[20];
strcpy(cstr2, cstr1);  // Copia
strcat(cstr1, " Mondo");  // Concatena
// std::string
std::string str1 = "Ciao";
std::string str2 = str1;  // Copia
str1 += " Mondo";  // Concatena
Come si può vedere, le operazioni std::string sono più intuitive e meno soggette a errori.
Conclusione
Complimenti! Hai appena fatto i tuoi primi passi nel mondo delle stringhe C++. Abbiamo coperto le stringhe a stile C, che sono un po' vecchio stile ma ancora importanti da conoscere, e la classe std::string, che è più moderna e conveniente.
Ricorda, la pratica fa la perfezione. Prova a scrivere alcuni programmi utilizzando entrambi i tipi di stringhe per rafforzare ciò che hai imparato. Prima di sapere, sarai in grado di manipolare le stringhe come un professionista!
Continua a programmare, continua a imparare, e, soprattutto, divertiti! Chi lo sa, forse un giorno scriverai la tua libreria di stringhe. Finora, happy coding!
Credits: Image by storyset
