Le stringhe sono un insieme di caratteri, possono contenenere anche spazi, caratteri speciali e a capi. Per esempio “esempio”, “Hello World” o “Ciao come stai?” sono stringhe.
Ogni stringa termina con un carattere “invisibile”, ovvero il carattere terminatore di stringa '\0'
.
Le stringhe a differenza dei singoli caratteri (che vengono delimitati da '
) sono contenute dai simboli "
.
In c è possibile creare una stringa attraverso la dichiarazione di un array di char
nel seguente modo:
char nome[] = "Giancarlo"; // dichiarazione e inizializzazione di una stringa
printf("%s", nome); // stampa di una stringa a terminale
Siccome le stringhe non sono altro che array di caratteri, è possibile accedere ai singoli elementi (caratteri) in questo modo:
char nome[] = "Giancarlo";
printf("%c", nome[2]); // --> a
Per modificare una stringa è necessario lavorare carattere per carattere come per esempio:
char nome[] = "Giancarlo";
printf("%c", nome[2]); // --> a
DANGER
Non è possibile modificare una stringa passando un’altra stringa come per esempio:
char nome[] = "Giancarlo";
nome = "NuovoNome"; // --> NO!
Il linguaggio c offre la possibilità di usare numerose funzioni molto utili per operare sulle stringhe come:
strlen(stringa)
restituisce la lunghezza della stringa (numero di caratteri)strcat(stringa1, stringa2)
concatena nella stringa1, l’unione tra stringa1 e stringa2strcpy(stringa1, stringa2)
copia la stringa2 nella stringa1strcmp(stringa1, stringa2)
restituisce 0 se le 2 stringhe sono uguali, 1 se stringa2 precede alfabeticamente stringa1, -1 viceversachar nome[] = "Giancarlo";
printf("%d", strlen(nome)); // --> 9
char stringa1[32] = "Ciao mondo ";
char stringa2[32] = "Come va??";
strcat(stringa1, stringa2);
printf("%s", stringa1); // --> Ciao mondo Come va??
char stringa1[32] = "Ciao mondo";
char stringa2[32] = "Come va??";
strcpy(stringa1, stringa2);
printf("%s", stringa1) // -> Come va??
printf("%s", stringa2) // -> Come va??
char stringa1[32] = "Ciao mondo";
char stringa2[32] = "Come va??";
if (strcmp(stringa1, stringa2) == 1) {
printf("La stringa '%s' precede la stringa '%s'", stringa2, stringa1);
} else if (strcmp(stringa1, stringa2) == -1) {
printf("La stringa '%s' precede la stringa '%s'", stringa1, stringa2);
} else if (strcmp(stringa1, stringa2) == 0) {
printf("La due stringhe: '%s' e '%s' sono uguali", stringa1, stringa2);
}
// --> La stringa 'Ciao mondo' precede la stringa 'Come va??'