C-stringhe vs string
C-stringa
È un array di caratteri terminato dal carattere speciale '\0'. Dimensione fissa, gestione manuale.
string
Un oggetto che gestisce da solo la memoria e la lunghezza. Si concatena con +, si confronta con ==.
Il terminatore \0
Una C-stringa occupa in RAM una cella per ogni carattere, più una cella finale che contiene '\0' (il carattere con codice 0). Serve a segnalare "qui la stringa finisce": senza, il programma non saprebbe dove fermarsi.
// la lunghezza si calcola contando fino al terminatore char s[] = "Ciao"; int len = 0; while (s[len] != '\0') len++; cout << len; // stampa 4
strcpy e strcmp
La libreria <cstring> mette a disposizione funzioni per lavorare sulle C-stringhe. Le due più importanti sono strcpy (copia) e strcmp (confronto).
strcpy · copiare
strcpy(dest, sorg) copia tutti i caratteri di sorg dentro dest, terminatore compreso. Attenzione: dest deve essere abbastanza grande.
#include <cstring> char sorg[] = "Hi"; char dest[10]; strcpy(dest, sorg); // dest contiene "Hi" cout << dest;
strcmp · confrontare
strcmp(a, b) confronta due C-stringhe e restituisce 0 se sono uguali, un numero negativo se a viene prima in ordine alfabetico, positivo se viene dopo. Non si possono confrontare con ==!
#include <cstring> char a[] = "mela", b[] = "pera"; if (strcmp(a, b) == 0) cout << "uguali"; else if (strcmp(a, b) < 0) cout << "a viene prima"; else cout << "b viene prima";
#include <string> string nome, cognome; cout << "Nome e cognome: "; cin >> nome >> cognome; string completo = cognome + " " + nome; cout << completo << " (" << completo.length() << " caratteri)";
Gli esercizi
Gli esercizi base lavorano sulle C-stringhe (con il terminatore da gestire a mano); quelli avanzati usano la classe string.