Prima di tutto:
- char[] funziona sia in C che in C++
- la classe string solo in C++
char [] è semplicemente un vettore di caratteri, come un vettore di double per esempio.
Per conoscere dove termina la stringa, per convenzione l'ultimo carattee deve essere '\0'.
Il fatto che sia un semplice vettore complica molto la gestione, e per molti compiti esistono funzioni standard già fatte, che si trovano in <string.h>
Alcuni esempi:
codice:
#include <string.h>
void main () {
// Dichiaro un vettore di 20 caratteri
// potrà contenerne 19 + il '\0' finale
char stringa[20];
// Per l'assegnamento non posso usare questo:
// stringa = "Ciao, mondo crudele!\0"
// ma:
strcpy(stringa, "Ciao, mondo crudele!);
// Concateno
strcat(stringa, " Addio!");
}
I difetti principali sono:
- Difficoltà nell'eseguire le varie operazioni
- Poca flessibilità: se una stringa supera i limiti dell'array, il sistema va in crash. Se per sicurezza dichiarerò un vettore molto grande, per pochi caratteri lo spazio sarà tutto sprecato.
Con il venire degli oggetti (C++), qualcuno ha pensato bene di sviluppare una classe che semplifichi tutto: la classe string.
L'header da includere è <string>, senza .h .
Tutte le funzioni / classi si trovano nel namespace std.
Esempio:
codice:
#include <string>
using namespace std;
void main() {
// Dichiaro un oggetto string
// e lo inizializzo con "Ciao"
string str1("Ciao");
// Concateno
str1 += " Mario";
// Elimino i primi 5 caratteri
str1.erase(0,5);
// Concateno ancora: non devo preoccuparmi
// delle dimensioni!!!
str1 += " è brutto";
}
Le funzioni in string sono molte e permettono di eseguire molte operazioni.
E' una spiegazione molto veloce, se vuoi approfondire comprati un libro segui un corso su internet.