prof. Nunzio Brugaletta | Programmazione e linguaggio C |
In C uno degli utilizzi degli array ad una dimensione riguarda la conservazione in memoria di stringhe di caratteri: queste in C sono vettori di tipo carattere la cui fine è segnalata da un carattere null (carattere terminatore), indicato come '\0'.
Il carattere null è il primo codice ASCII corrispondente al valore binario 00000000 e non ha niente a che vedere con il carattere 0 che ha, in ASCII, codice binario 00110000.
char a[10];
dichiara un vettore costituito da un massimo di dieci caratteri e:
char frase[] = "Oggi il cielo è sereno";
dichiara l'array monodimensionale frase il cui numero di caratteri è determinato dalla quantità di caratteri presenti fra doppi apici più uno (il carattere null che chiude la stringa).
È importante notare la differenza tra le due assegnazioni:
char a = 'r'; char b[] = "r";
Nel primo caso viene assegnato il solo carattere r, nel secondo la stringa r\0. In definitiva: se si vuole fare riferimento ad un solo carattere, questo deve essere racchiuso fra apici singoli; se, invece, si vuole fare riferimento ad una stringa, occorre racchiuderla fra doppi apici.
Sono disponibili parecchie funzioni specifiche per il trattamento delle stringhe nonostante il linguaggio C non possieda un dato di tipo stringa:
gets e puts. Le funzioni gets e puts sono funzioni specializzate nell'input e output di una stringa. Il programma seguente riceve in input una stringa e, subito dopo, la rimanda in output. Notare che in queste istruzioni si fa riferimento alla stringa nel suo complesso e, quindi, ne viene utilizzato il nome:
#include <stdio.h> main() { char s[80]; /* dichiara la stringa */ gets(s); /* riceve l'input */ puts(s); /* fornisce l'output */ }
Altre funzioni per il trattamento delle stringhe sono disponibili, per usi particolari, a patto che si includa nel programma la linea: #include <string.h>.
strcpy. Questa funzione copia una stringa in un'altra. Può essere utilizzata, per esempio, per assegnare un valore a una stringa. La sua sintassi è:
strcpy(s1,s2);
Si può immaginare che tale funzione equivale, come effetto, all'assegnamento nelle variabili di altro tipo (in altri termini è come se si scrivesse: s1=s2 assegna, cioè, alla stringa s1 il valore contenuto in s2. In realtà, come si vedrà più avanti, tale istruzione è valida ma assume altro significato).
strcat, strlen e strcmp. La funzione:
strcat(s1,s2);
concatena la stringa s2 alla fine della stringa s1:
strcpy(s1,"buon"); /* stringa specificata in s1 */ strcpy(s2,"giorno"); /* lo stesso per s2 */ strcat(s1,s2); /* s1 conterrà "buongiorno" */
La funzione:
strlen(s1);
restituisce un valore numerico che rappresenta la lunghezza della stringa s1.
La funzione:
strcmp(s1,s2);
può essere utilizzata per effettuare comparazioni sul contenuto di due stringhe. In particolare tale funzione:
Restituisce un valore positivo se vale s1>s2
Restituisce un valore negativo se vale s1<s2
Restituisce 0 se s1 ed s2 sono uguali
Per tenere conto mnemonicamente di tali valori, basta pensare al confronto come ad una sottrazione: fra l’altro ciò non è molto distante da quello che avviene in effetti. Se da s1 si sottrae s2 si avrà un valore positivo nel caso s1>s2, negativo se s1<s2 e nullo se sono uguali
http://ennebi.solira.org | ennebi@solira.org |