a p e \0 STRINGHE: ARRAY DI CARATTERI d i \0 STRINGHE
Transcript
a p e \0 STRINGHE: ARRAY DI CARATTERI d i \0 STRINGHE
STRINGHE: ARRAY DI CARATTERI • Una stringa di caratteri in C è un array di caratteri terminato dal carattere • Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1 caratteri, perché una cella è destinata al terminatore . STRINGHE: ARRAY DI CARATTERI • Un array di N caratteri può ben essere usato per memorizzare stringhe più corte • In questo caso, le celle oltre la k-esima (k essendo la lunghezza della stringa) sono concettualmente vuote: praticamente sono inutilizzate e contengono un valore casuale. STRINGHE • Una stringa si può inizializzare, come ogni altro array, elencando le singole componenti: oppure anche, più brevemente, con la forma compatta seguente: Il carattere di terminazione ‘\0’ è automaticamente incluso in fondo. Attenzione alla lunghezza! STRINGHE: LETTURA E SCRITTURA • Una stringa si può leggere da tastiera e stampare, come ogni altro array, elencando le singole componenti: !"#$ !# • oppure anche, più brevemente, con la forma compatta seguente: !"# NOTA: E’ un’eccezione !!! Gli array non si possono leggere e scrivere interamente, ma elemento per elemento. ESEMPIO Problema: Date due stringhe di caratteri, decidere quale precede l’altra in ordine alfabetico. Rappresentazione dell’informazione: • poiché vi possono essere tre risultati (s1<s2, s1==s2, s2<s1), un boolean non basta • possiamo usare: – due boolean (%&%' e ) – tre boolean (%&%', (), )() – un intero (negativo, zero, positivo) scegliamo la terza via. ESEMPIO Specifica: • scandire uno a uno gli elementi di egual posizione delle due stringhe, o fino alla fine delle stringhe, o fino a che se ne trovano due diversi – nel primo caso, le stringhe sono uguali – nel secondo, sono diverse • nel secondo caso, confrontare i due caratteri così trovati, e determinare qual è il minore – la stringa a cui appartiene tale carattere precede l’altra ESEMPIO Codifica: * (#+ )#+ , '(-$$)-$$ () (.) ↔ ↔ // ↔ ESEMPIO Problema: Data una stringa di caratteri, copiarla in un altro array di caratteri (di lunghezza non inferiore). Ipotesi: La stringa è “ben formata”, ossia correttamente terminata dal carattere ‘\0’. Specifica: • scandire la stringa elemento per elemento, fino a trovare il terminatore ‘\0’ (che esiste certamente) • nel fare ciò, copiare l’elemento nella posizione corrispondente dell’altro array. ESEMPIO Codifica:copia della stringa carattere per carattere * 0'*11'** ) - ) ) ESEMPIO Perché non fare così? * 0'*11'** ) ) !!"! #$%"&'$($") * ++ ESEMPIO Problema: Data una stringa di caratteri, scrivere una funzione che ne calcoli la lunghezza. !"#$ ,. /012 Codifica: '%& 11 '%& '%&'%&-'%& LIBRERIA SULLE STRINGHE Il C fornisce una nutrita libreria di funzioni per operare sulle stringhe: 2'%& 3 Include funzioni per: – – – – – – copiare una stringa in un’altra (4) concatenare due stringhe () confrontare due stringhe (*) cercare un carattere in una stringa ( ) cercare una stringa in un’altra () ...