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 ()
...