SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
LEZIONI DI
PROGRAMMAZIONE IN
“Le stringhe”
Ing. Cristian Randieri
Università degli Studi di Catania
Istituto Nazionale di Fisica Nucleare (INFN)
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Introduzione
In C non esiste un vero e proprio
tipo di dato “Stringa”.
Le stringhe sono gestite dal
compilatore come sequenze di
caratteri, cioè di dati di tipo char.
Esistono due metodi comunemente
utilizzati per dichiarare e
manipolare stringhe nei programmi
ovvero mediante l’uso:
 degli array;
 dei puntatori.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Le stringhe e gli array
In C uno degli utilizzi degli array ad una
dimensione riguarda la conservazione in
memoria di stringhe di caratteri: queste in C
sono array 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.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Esempio
char a[10];
dichiara un vettore costituito da un massimo di
dieci caratteri e:
char frase[] = "Oggi c'è il sole";
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).
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Assegnazione di valori
È 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 r0. 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.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzioni per il trattamento
delle stringhe
Nonostante il linguaggio C non
possieda un dato di tipo stringa, sono
disponibili parecchie funzioni specifiche
per il trattamento di quest’ultime:
 gets e puts
 strcpy
 strcat, strlen e strcmp
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzioni “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, viene utilizzato
il nome:
#include <stdio.h>
main() {
char s[80]; /* dichiara la stringa */
gets(s); /* riceve l'input */
puts(s); /* fornisce l'output */
}
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Altre funzioni per il trattamento delle stringhe
sono disponibili, per usi particolari, a patto che
si includa nel programma la libreria delle
funzioni “string” mediante la seguente
istruzione:
#include <string.h>
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzione “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.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzione “strcat”
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"
*/
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzione ” strlen ”
La funzione:
strlen(s1);
restituisce un valore numerico
che rappresenta la lunghezza
della stringa s1.
Es. a=strlen (s1);
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzione “strcmp”
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
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Funzione “strcmp”
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.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Esempio
#include <stdio.h>
#include <string.h>
main(){
char S1[10],S2[10]; /* dichiara le
stringhe */
gets (S1);
gets (S2);
if (strcmp (S1,S2)==0)
printf("n Le parole sono uguali ");
else
printf("n Le parole sono diverse
");
}
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Array di stringhe
Una applicazione interessante delle matrici è
l’array di stringhe.
La stringa è un array di caratteri e quindi
potremmo dire che un array di stringhe è un
array di array di caratteri.
Per chiarire la gestione di questo tipo di array
esaminiamo un programma che si occupa di
cercare delle parole in un vocabolario e ci dica,
per ognuna, se è contenuta nel vocabolario
stesso:
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Programma esempio
/* Cerca parole in un vocabolario */
#include <stdio.h>
#include <string.h> /*1*/
main(){
char vocab[10][20], parcerc[20]; /*2*/
int i,trovata;
/* Acquisisce parole da inserire nel
vocabolario */
for (i=0;i<=9;i++) {
printf("nParola %d ",i);
gets(vocab[i]); /*3*/
}
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Programma esempio
/* Acquisisce la parola da cercare */
printf("nnParola da cercare (Invio per finire)
");
gets(parcerc);
while (strcmp(parcerc,"")) { /*4*/
/* Cerca la parola */
trovata=0; /*5*/
for (i=0;i<=9;i++) {
if (!strcmp(parcerc,vocab[i])) { /*6*/
trovata=1; /*7*/
break; /*8*/
}
}
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Programma esempio
if (trovata) /*9*/
printf("nParola trovata");
else
printf("nParola non trovata");
/* Prossima parola da cercare */
printf("nnParola da cercare (Invio
per finire) ");
gets(parcerc);
}
}
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
#include <string.h> /*1*/
La dichiarazione della riga 1
permette l’utilizzo all’interno
del programma delle funzioni
per il trattamento delle
stringhe.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
char vocab[10][20], parcerc[20]; /*2*/
Nella riga 2 viene dichiarato l’array di caratteri
vocab[10][20]. Il nostro vocabolario conterrà
quindi un massimo di 10 parole ognuna composta di
un massimo di 20 caratteri. La prima parola è
contenuta in vocab[0] e con vocab[2][7],
qualora dovesse interessare, si individuerebbe
l’ottavo carattere della terza parola del vocabolario.
Ogni riga della tabella conterrà una parola e in ogni
colonna ci sono i caratteri che compongono le
parole. L’array parcerc[20] servirà per contenere
la parola da cercare.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
gets(vocab[i]); /*3*/
Nella riga 3 si acquisiscono le parole da inserire nel
vocabolario: la prima volta l’istruzione si leggerà
gets(vocab[0]), quindi gets(vocab[1]) e infine
gets(vocab[9]) in relazione ai diversi valori assunti
dal contatore i.
L’uso di un solo indice dipende dal fatto che, con la gets,
si acquisisce una stringa e quindi nel nostro caso una
intera riga della matrice.
Se avessimo voluto acquisire le stringhe un carattere per
volta, si sarebbero dovuti gestire due cicli uno annidato
nell’altro, contenenti l’istruzione
scanf("%c",&vocab[i][j]).
Alla fine avremmo dovuto aggiungere il carattere null.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
while (strcmp(parcerc,"")) { /*4*/
Nella riga 4 si gestisce la condizione di uscita dal ciclo.
La stringa ricevuta dall’input viene comparata con la
stringa vuota (due doppi apici consecutivi): se alla
richiesta di input della stringa da cercare si risponde
premendo solamente il tasto Invio, viene acquisita una
stringa contenente solo il carattere terminatore null.
Ciò rende falsa la condizione e quindi il ciclo ha
termine (strcmp in questo caso restituisce 0).
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
trovata=0; /*5*/
La variabile trovata che viene azzerata nella riga 5
registrerà l’eventuale ritrovamento della stringa
all’interno del vocabolario.
Il valore assegnato non ha il senso di un valore
numerico a tutti gli effetti ma il senso di un valore
logico (0 = falso, un valore non nullo=vero).
Una variabile usata in questo modo viene chiamata
solitamente variabile logica, switch o flag.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
if (!strcmp(parcerc,vocab[i])) { /*6*/
Nella 6 si confronta la parola da
cercare via via con le parole contenute
nel vocabolario.
L’equivalenza delle due stringhe, quella
da cercare e la parola del vocabolario
esaminata, rende vera la condizione.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
trovata=1; /*7*/
break; /*8*/
In questo caso, riga 7, si rende vera
la variabile trovata assegnandole un
valore non nullo e con la break della
riga 8 si forza l’uscita dal ciclo
poiché è inutile continuare a
confrontare la parola cercata con il
resto delle parole del vocabolario: la
ricerca viene sospesa.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
if (trovata) /*9*/
Nella riga 9 si esegue un test sul flag trovata: se
è vero (cioè è stata eseguita l’istruzione della riga 7)
la parola è stata trovata, se è falso (è rimasto
inalterato il valore assegnato nella istruzione della
riga 5) la ricerca ha avuto esito negativo.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Le stringhe e i puntatori
Un metodo comunemente
utilizzato per dichiarare e
manipolare stringhe nei
programmi è offerto dai
puntatori.
Come si vede nel
programma dell'esempio
seguente, che visualizza
"Ciao Ciao" e porta a
capo il cursore.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Esempio
#include <stdio.h>
char *string = "Ciao";
void main(void)
{
printf(string);
printf(" %s
n",string);
}
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
char *string = "Ciao";
La dichiarazione di string può apparire, a prima vista,
anomala.
Si tratta infatti, a tutti gli effetti, della dichiarazione di
un puntatore e la stranezza consiste nel fatto che a
questo non è assegnato un indirizzo di memoria, come
ci si potrebbe aspettare, bensì una costante stringa.
Ma è proprio questo l'artificio che consente di gestire le
stringhe con normali puntatori a carattere: il
compilatore, in realtà, assegna a string, puntatore a
16 bit, l'indirizzo della costante "Ciao".
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
Dunque la word occupata da string non contiene la
parola "Ciao", ma i 16 bit che esprimono la parte
offset del suo indirizzo.
A sua volta, "Ciao" occupa 5 byte di memoria.
Proprio 5, non si tratta di un errore di stampa: i 4 byte
necessari a memorizzare i 4 caratteri che compongono
la parola, più un byte, nel quale il compilatore
memorizza il valore binario 0, detto terminatore di
stringa o null terminator.
In C, tutte le stringhe sono chiuse da un null
terminator, ed occupano perciò un byte in più del
numero di caratteri "stampabili" che le compongono.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
printf(string);
La prima chiamata a printf() passa quale
argomento proprio string: dunque la stringa
parametro indispensabile di printf() non deve
essere necessariamente una stringa di formato
quando l'unica cosa da visualizzare sia proprio una
stringa. Lo è, però, quando devono essere visualizzati
caratteri o numeri, o stringhe formattate in un modo
particolare, come avviene nella seconda chiamata.
printf(" %s n",string);
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Osservazioni
Per visualizzare una stringa con printf() occore
fornirne l'indirizzo, che nel nostro caso è il contenuto
del puntatore string.
Se string punta alla stringa "Ciao", che cosa
restituisce l'espressione *string?
La tentazione di rispondere "Ciao" è forte, ma se così
fosse perché per visualizzare la parola occorre passare
a printf() string e non *string?
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Osservazioni
Il problema non si poneva con gli esempi precedenti,
perché tutti i puntatori esaminati indirizzavano un
unico dato di un certo tipo.
Con le dichiarazioni:
float numero = 12.5;
float *numPtr = &numero;
si definisce il puntatore numPtr e lo si inizializza in
modo che contenga l'indirizzo della variabile numero,
la quale, in fondo proprio come string, occupa più di
un byte. In questo caso, però, i 4 byte di numero
contengono un dato unitariamente considerato.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Osservazioni
In altre parole, nessuno dei 4 byte che la compongono
ha significato in sé e per sé.
Con riferimento a string, al contrario, ogni byte è un
dato a sé stante, cioè un dato di tipo char: bisogna
allora precisare che un puntatore indirizza sempre il
primo byte di tutti quelli che compongono il tipo di
dato considerato, se questi sono più d'uno.
Se ne ricava che string contiene, in realtà, l'indirizzo
del primo carattere di "Ciao", cioè la 'C'.
Allora *string non può che restituire proprio quella,
come si può facilmente verificare con la seguente
chiamata a printf():
printf("%c è il primo carattere...n",*string);
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Le stringhe come sequenze di
caratteri
Le stringhe sono, per il compilatore C, semplici
sequenze di char: la stringa del nostro esempio:
char *string = "Ciao";
inizia con il char che si trova all'indirizzo contenuto
in string (la 'C') e termina con il primo byte nullo
incontrato ad un indirizzo uguale o superiore a quello
del primo carattere (nell’esempio il byte che segue
immediatamente la 'o').
Per accedere ai caratteri che seguono il primo è
sufficiente incrementare il puntatore o, comunque,
sommare ad esso una opportuna quantità (che
rappresenta l'offset, cioè lo spostamento, dall'inizio
della stringa stessa).
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Esempio
int i = 0;
while(*(string+i) != 0)
{ printf("%cn",*(string+i));
++i; }
L'esempio si basa sull'aritmetica dei puntatori, cioè
sulla possibilità di accedere ai dati memorizzati ad un
certo offset rispetto ad un indirizzo sommandovi
algebricamente numeri interi.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
while(*(string+i) != 0)
{ printf("%cn",*(string+i));
++i; }
Il ciclo visualizza la stringa "Ciao" in senso verticale.
Infatti l'istruzione while esegue le istruzioni comprese
tra le parentesi graffe finché la condizione espressa tra
le parentesi tonde è vera (se questa è falsa la prima
volta, il ciclo non viene mai eseguito): in questo caso
la printf() è eseguita finché il byte che si trova
all'indirizzo contenuto in string aumentato di i unità
è diverso da 0, cioè finché non viene incontrato il null
terminator.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
printf("%cn",*(string+i));
La printf() visualizza il byte a quello stesso indirizzo
e va a capo.
Il valore di i è inizialmente 0, pertanto nella prima
iterazione l'indirizzo espresso da string non è
modificato, ma ad ogni loop i è incrementato di 1
(tale è il significato dell'operatore ++), pertanto ad
ogni successiva iterazione l'espressione string+i
restituisce l'indirizzo del byte successivo a quello
appena visualizzato.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Descrizione
Al termine, i contiene il valore 4, che è anche la
lunghezza della stringa: questa è infatti
convenzionalmente pari al numero dei caratteri
stampabili che compongono la stringa stessa; il null
terminator non viene considerato.
int i = 0;
while(*(string+i) != 0)
{ printf("%cn",*(string+i));
++i; }
In altre parole la lunghezza di una stringa è inferiore di 1
al numero di byte che essa occupa effettivamente in
memoria.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Lunghezza di una stringa
La lunghezza di una stringa può quindi essere calcolata
così:
unsigned i = 0;
while(*(string+i)) ++i;
La condizione tra parentesi è implicita: non viene
specificato alcun confronto.
In casi come questo il compilatore assume che il
confronto vada effettuato con il valore 0, che è proprio
quel che fa al nostro caso.
Inoltre, dato che il ciclo si compone di una sola riga
(l'autoincremento di i), le graffe non sono necessarie.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Osservazione
Quando ad una funzione viene passata una
costante stringa, come in:
printf("Ciao!n");
il compilatore, astutamente, memorizza la
costante e ne passa l'indirizzo.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Esempio: modifica di una
stringa
char *string = "Rosson";
Void main(void)
{ printf(string);
*(string+3) = 'p';
printf(string);
}
Il programma dell'esempio visualizza dapprima la
parola "Rosso" e poi "Rospo".
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Osservazioni
Il valore di string non è mutato: esso continua a
puntare alla medesima locazione di memoria, ma è
mutato il contenuto del byte che si trova ad un offset di
3 rispetto a quell'indirizzo.
Dal momento che l'indirezione di un puntatore a
carattere restituisce un carattere, nell'assegnazione
della lettera 'p' è necessario esprimere quest'ultima
come un char, e pertanto tra apici (e non tra
virgolette).
La variabile string non a casp è dichiarata all'esterno
di main().
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Come troncare una stringa
Per troncare una stringa basta inserire un NULL
dove occorre:
*(string+2) = NULL;
A questo punto una chiamata a printf()
visualizzerebbe la parola "Ro".
NULL è una costante manifesta definita in
STDIO.H, e rappresenta lo zero binario; infatti la
riga di codice precedente potrebbe essere scritta
così:
*(string+2) = 0;
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Come allungare una stringa
Se si sovrascrive il NULL con un carattere, la stringa si allunga sino
al successivo NULL.
Occorre fare alcune considerazioni:
 in primo luogo, tale operazione ha senso, di solito, solo nel caso
di concatenamento di stringhe (quando cioè si desidera
accodare una stringa ad un'altra per produrne una sola, più
lunga).
 In secondo luogo, se i byte successivi al NULL sono occupati da
altri dati, questi vengono perduti, sovrascritti dai caratteri
concatenati alla stringa: l'effetto può essere disastroso.
 Abbiamo visto che esiste una funzione di libreria concepita
appositamente per concatenare le stringhe: la strcat(), che
richiede due stringhe quali parametri. L'azione da essa svolta
consiste nel copiare i byte che compongono la seconda stringa,
NULL terminale compreso, in coda alla prima stringa,
sovrascrivendone il NULL terminale.
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
Osservazioni
In una dichiarazione come quella di string, il
compilatore riserva alla stringa lo spazio
strettamente necessario a contenere i caratteri
che la compongono, più il NULL.
E' evidente che concatenare a string un'altra
stringa sarebbe un grave errore (peraltro non
segnalato dal compilatore, perché esso lascia il
programmatore libero di gestire la memoria
come crede: se sbaglia, peggio per lui).
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
E' meglio sottolineare che le librerie standard
del C comprendono un gran numero di
funzioni (dichiarate in STRING.H) per la
manipolazione delle stringhe, che effettuano
le più svariate operazioni: copiare stringhe o
parte di esse (strcpy(), strncpy()),
concatenare stringhe (strcat(),
strncat()), confrontare stringhe
(strcmp(), stricmp()), ricercare
sottostringhe o caratteri all'interno di stringhe
(strstr(), strchr(), strtok())...
Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe”
FINE

Contenu connexe

Tendances

Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012STELITANO
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterativeguest60e9511
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012STELITANO
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatoriMajong DevJfu
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I Oguest60e9511
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturatiMajong DevJfu
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2Majong DevJfu
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusionePiero Fraternali
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 

Tendances (20)

Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012Soluzioni abilità informatiche 16 maggio 2012
Soluzioni abilità informatiche 16 maggio 2012
 
3 Linguaggioc
3   Linguaggioc3   Linguaggioc
3 Linguaggioc
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
 
Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012Soluzione esame b del 13 giugno 2012
Soluzione esame b del 13 giugno 2012
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
 
Stringhe java
Stringhe javaStringhe java
Stringhe java
 
10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati10 - Programmazione: Tipi di dato strutturati
10 - Programmazione: Tipi di dato strutturati
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
Gcc & Make
Gcc & MakeGcc & Make
Gcc & Make
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione05 2 integrali-conversioni-costanti-preproc-inclusione
05 2 integrali-conversioni-costanti-preproc-inclusione
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Flow chart
Flow chartFlow chart
Flow chart
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 

En vedette

Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...
Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...
Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...Cristian Randieri PhD
 
Coaching y liderazgo_personal
Coaching y liderazgo_personalCoaching y liderazgo_personal
Coaching y liderazgo_personalfpasoneja
 
Document management system and scanning software
Document management system and scanning softwareDocument management system and scanning software
Document management system and scanning softwareDigismartek
 
THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...
THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...
THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...Azamat Abdoullaev
 
Comparison of 2mm HiRel Connectors to the Mil Std
Comparison of 2mm HiRel Connectors to the Mil StdComparison of 2mm HiRel Connectors to the Mil Std
Comparison of 2mm HiRel Connectors to the Mil StdPhil Heft
 
Cisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable WebCisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable WebCisco DevNet
 
حل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله استاذ محمود حلمي
حل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله  استاذ محمود حلميحل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله  استاذ محمود حلمي
حل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله استاذ محمود حلميThanawyaHome
 
+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...
+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...
+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...Transmission RH
 
129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...
129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...
129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...Cristian Randieri PhD
 
Offline Drupal with progressive web app
Offline Drupal with progressive web appOffline Drupal with progressive web app
Offline Drupal with progressive web appThéodore Biadala
 
成功するスタートアップの作り方 ー 完全版
成功するスタートアップの作り方 ー 完全版 成功するスタートアップの作り方 ー 完全版
成功するスタートアップの作り方 ー 完全版 Masa Tadokoro
 

En vedette (17)

Targa Naro Campionati Siciliani
Targa Naro Campionati SicilianiTarga Naro Campionati Siciliani
Targa Naro Campionati Siciliani
 
4 Corso introduttivo al Golf - TIM
4 Corso introduttivo al Golf - TIM4 Corso introduttivo al Golf - TIM
4 Corso introduttivo al Golf - TIM
 
Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...
Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...
Introduzione alla Domotica vantaggi e prospettive - Progettare un impianto Do...
 
Coaching y liderazgo_personal
Coaching y liderazgo_personalCoaching y liderazgo_personal
Coaching y liderazgo_personal
 
Document management system and scanning software
Document management system and scanning softwareDocument management system and scanning software
Document management system and scanning software
 
THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...
THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...
THE KEY WORLD LAW ONE MUST KNOW: AB REVERSIBILITY PRINCIPLE: Prime-Principle ...
 
Comparison of 2mm HiRel Connectors to the Mil Std
Comparison of 2mm HiRel Connectors to the Mil StdComparison of 2mm HiRel Connectors to the Mil Std
Comparison of 2mm HiRel Connectors to the Mil Std
 
Oude adreskaarten in steen en hout te Dokkum
Oude adreskaarten in steen en hout te DokkumOude adreskaarten in steen en hout te Dokkum
Oude adreskaarten in steen en hout te Dokkum
 
Productivity Network
Productivity NetworkProductivity Network
Productivity Network
 
Cisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable WebCisco Spark and Tropo and the Programmable Web
Cisco Spark and Tropo and the Programmable Web
 
حل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله استاذ محمود حلمي
حل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله  استاذ محمود حلميحل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله  استاذ محمود حلمي
حل جميع اسئلة الكتاب المدرسى المطالعة واهم الاسئلة بصيغة جميله استاذ محمود حلمي
 
แนวข้อสอบประมวล Radompon
แนวข้อสอบประมวล Radomponแนวข้อสอบประมวล Radompon
แนวข้อสอบประมวล Radompon
 
+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...
+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...
+Conférence "Définir un projet professionnel porteur de sens et de bonheur", ...
 
129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...
129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...
129 Automazione e manutenzione predittiva nell’era del cloud - Automazione Og...
 
Ethical leadership
Ethical leadership Ethical leadership
Ethical leadership
 
Offline Drupal with progressive web app
Offline Drupal with progressive web appOffline Drupal with progressive web app
Offline Drupal with progressive web app
 
成功するスタートアップの作り方 ー 完全版
成功するスタートアップの作り方 ー 完全版 成功するスタートアップの作り方 ー 完全版
成功するスタートアップの作り方 ー 完全版
 

Similaire à Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intellisystem.it

Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Majong DevJfu
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)STELITANO
 
Lezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamLezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamNicola Paoletti
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97Roberto Barbiera
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiAngela Cristina
 
Syntactical errors detection 1
Syntactical errors detection 1Syntactical errors detection 1
Syntactical errors detection 1LucaPostiglione2
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)STELITANO
 
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...Cristian Randieri PhD
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)STELITANO
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 

Similaire à Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intellisystem.it (20)

Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Video python3 n2
Video python3 n2Video python3 n2
Video python3 n2
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
R Vectors
R VectorsR Vectors
R Vectors
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
Lezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM UnicamLezione5 - MIPS & SPIM Unicam
Lezione5 - MIPS & SPIM Unicam
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97Php Funzioni Built In Barbiera 97
Php Funzioni Built In Barbiera 97
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -Fondamenti
 
Syntactical errors detection 1
Syntactical errors detection 1Syntactical errors detection 1
Syntactical errors detection 1
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
 
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
 
Compressione dei file
Compressione dei fileCompressione dei file
Compressione dei file
 
Rest sdk
Rest sdkRest sdk
Rest sdk
 
Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)Lezione 1 (27 febbraio 2012)
Lezione 1 (27 febbraio 2012)
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 

Plus de Cristian Randieri PhD

IT-ISS 3000 CONTROLLER - Accessories & Controller
IT-ISS 3000 CONTROLLER - Accessories & ControllerIT-ISS 3000 CONTROLLER - Accessories & Controller
IT-ISS 3000 CONTROLLER - Accessories & ControllerCristian Randieri PhD
 
IT-VCHD90-PRO - Videoconference & Telemedicine – Video System
IT-VCHD90-PRO - Videoconference & Telemedicine – Video SystemIT-VCHD90-PRO - Videoconference & Telemedicine – Video System
IT-VCHD90-PRO - Videoconference & Telemedicine – Video SystemCristian Randieri PhD
 
148 La comunicazione via satellite per la business continuity ed il disaster ...
148 La comunicazione via satellite per la business continuity ed il disaster ...148 La comunicazione via satellite per la business continuity ed il disaster ...
148 La comunicazione via satellite per la business continuity ed il disaster ...Cristian Randieri PhD
 
147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...
147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...
147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...Cristian Randieri PhD
 
146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...
146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...
146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...Cristian Randieri PhD
 
145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...
145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...
145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...Cristian Randieri PhD
 
144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...
144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...
144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...Cristian Randieri PhD
 
139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...
139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...
139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...Cristian Randieri PhD
 
138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...
138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...
138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...Cristian Randieri PhD
 
136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...
136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...
136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...Cristian Randieri PhD
 
133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...
133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...
133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...Cristian Randieri PhD
 
132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...
132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...
132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...Cristian Randieri PhD
 
131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...
131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...
131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...Cristian Randieri PhD
 
130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...
130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...
130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...Cristian Randieri PhD
 
128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...
128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...
128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...Cristian Randieri PhD
 
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...Cristian Randieri PhD
 
122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016 - Cris...
122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016  - Cris...122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016  - Cris...
122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016 - Cris...Cristian Randieri PhD
 
121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...
121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...
121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...Cristian Randieri PhD
 

Plus de Cristian Randieri PhD (20)

IT-ISS 3000 CONTROLLER - Accessories & Controller
IT-ISS 3000 CONTROLLER - Accessories & ControllerIT-ISS 3000 CONTROLLER - Accessories & Controller
IT-ISS 3000 CONTROLLER - Accessories & Controller
 
It 2 x-2hdmi-datasheet
It 2 x-2hdmi-datasheetIt 2 x-2hdmi-datasheet
It 2 x-2hdmi-datasheet
 
IT-VCHD90-PRO - Videoconference & Telemedicine – Video System
IT-VCHD90-PRO - Videoconference & Telemedicine – Video SystemIT-VCHD90-PRO - Videoconference & Telemedicine – Video System
IT-VCHD90-PRO - Videoconference & Telemedicine – Video System
 
148 La comunicazione via satellite per la business continuity ed il disaster ...
148 La comunicazione via satellite per la business continuity ed il disaster ...148 La comunicazione via satellite per la business continuity ed il disaster ...
148 La comunicazione via satellite per la business continuity ed il disaster ...
 
147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...
147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...
147 Industria 4.0: L’automazione per l’eccellenza del settore alimentare - I ...
 
146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...
146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...
146 63° Congresso del CNI - Aggregazione e Comunicazione: Facciamo Rete con l...
 
145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...
145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...
145 Internazionalizzazione ed innovazione: le chiavi per uscire dalla crisi c...
 
144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...
144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...
144 Green Energy - Intervista a Cristian Randieri - I figli di Archimede N. 2...
 
IT-SSA5F-IR
IT-SSA5F-IRIT-SSA5F-IR
IT-SSA5F-IR
 
139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...
139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...
139 Tavola Rotonda “Edge e Cloud Computing” - Automazione Oggi N. 399 – Giugn...
 
138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...
138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...
138 Identificazione e tracciabilità nell’era dell’IoT: unconventional, smart ...
 
136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...
136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...
136 Packaging: riprende la corsa delle tecnologie Made in Italy - Automazione...
 
133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...
133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...
133 Tavola Rotonda “Marcia indietro" - Automazione Oggi N. 396 – Marzo 2017 -...
 
132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...
132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...
132 Soluzioni satellitari integrate per il controllo remoto dei sistemi TV Br...
 
131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...
131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...
131 Curarsi con la tecnologia - Il punto di vista di Intellisystem Technologi...
 
130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...
130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...
130 FN 90 Febbraio 2017 - Tavola Rotonda L'analisi tanto attesa - Fieldbus & ...
 
128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...
128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...
128 Tavola Rotonda Lavorare ‘mobile’: potenzialità e criticità - Fieldbus & N...
 
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
124 SISTEMI DI SICUREZZA SEMPRE PIÙ “VERSO LA NUVOLA” - Safety & Security N. ...
 
122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016 - Cris...
122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016  - Cris...122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016  - Cris...
122 Ispezione di linee aeree - Automazione Oggi N. 393 – Ottobre 2016 - Cris...
 
121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...
121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...
121 Il punto sulla meccatronica - Embedded N. 61 – Settembre 2016 - Cristian ...
 

Dernier

lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 

Dernier (8)

lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 

Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intellisystem.it

  • 1. LEZIONI DI PROGRAMMAZIONE IN “Le stringhe” Ing. Cristian Randieri Università degli Studi di Catania Istituto Nazionale di Fisica Nucleare (INFN)
  • 2. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Introduzione In C non esiste un vero e proprio tipo di dato “Stringa”. Le stringhe sono gestite dal compilatore come sequenze di caratteri, cioè di dati di tipo char. Esistono due metodi comunemente utilizzati per dichiarare e manipolare stringhe nei programmi ovvero mediante l’uso:  degli array;  dei puntatori.
  • 3. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Le stringhe e gli array In C uno degli utilizzi degli array ad una dimensione riguarda la conservazione in memoria di stringhe di caratteri: queste in C sono array 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.
  • 4. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Esempio char a[10]; dichiara un vettore costituito da un massimo di dieci caratteri e: char frase[] = "Oggi c'è il sole"; 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).
  • 5. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Assegnazione di valori È 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 r0. 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.
  • 6. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzioni per il trattamento delle stringhe Nonostante il linguaggio C non possieda un dato di tipo stringa, sono disponibili parecchie funzioni specifiche per il trattamento di quest’ultime:  gets e puts  strcpy  strcat, strlen e strcmp
  • 7. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzioni “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, viene utilizzato il nome: #include <stdio.h> main() { char s[80]; /* dichiara la stringa */ gets(s); /* riceve l'input */ puts(s); /* fornisce l'output */ }
  • 8. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Altre funzioni per il trattamento delle stringhe sono disponibili, per usi particolari, a patto che si includa nel programma la libreria delle funzioni “string” mediante la seguente istruzione: #include <string.h>
  • 9. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzione “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.
  • 10. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzione “strcat” 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" */
  • 11. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzione ” strlen ” La funzione: strlen(s1); restituisce un valore numerico che rappresenta la lunghezza della stringa s1. Es. a=strlen (s1);
  • 12. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzione “strcmp” 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
  • 13. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Funzione “strcmp” 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.
  • 14. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Esempio #include <stdio.h> #include <string.h> main(){ char S1[10],S2[10]; /* dichiara le stringhe */ gets (S1); gets (S2); if (strcmp (S1,S2)==0) printf("n Le parole sono uguali "); else printf("n Le parole sono diverse "); }
  • 15. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Array di stringhe Una applicazione interessante delle matrici è l’array di stringhe. La stringa è un array di caratteri e quindi potremmo dire che un array di stringhe è un array di array di caratteri. Per chiarire la gestione di questo tipo di array esaminiamo un programma che si occupa di cercare delle parole in un vocabolario e ci dica, per ognuna, se è contenuta nel vocabolario stesso:
  • 16. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Programma esempio /* Cerca parole in un vocabolario */ #include <stdio.h> #include <string.h> /*1*/ main(){ char vocab[10][20], parcerc[20]; /*2*/ int i,trovata; /* Acquisisce parole da inserire nel vocabolario */ for (i=0;i<=9;i++) { printf("nParola %d ",i); gets(vocab[i]); /*3*/ }
  • 17. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Programma esempio /* Acquisisce la parola da cercare */ printf("nnParola da cercare (Invio per finire) "); gets(parcerc); while (strcmp(parcerc,"")) { /*4*/ /* Cerca la parola */ trovata=0; /*5*/ for (i=0;i<=9;i++) { if (!strcmp(parcerc,vocab[i])) { /*6*/ trovata=1; /*7*/ break; /*8*/ } }
  • 18. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Programma esempio if (trovata) /*9*/ printf("nParola trovata"); else printf("nParola non trovata"); /* Prossima parola da cercare */ printf("nnParola da cercare (Invio per finire) "); gets(parcerc); } }
  • 19. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione #include <string.h> /*1*/ La dichiarazione della riga 1 permette l’utilizzo all’interno del programma delle funzioni per il trattamento delle stringhe.
  • 20. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione char vocab[10][20], parcerc[20]; /*2*/ Nella riga 2 viene dichiarato l’array di caratteri vocab[10][20]. Il nostro vocabolario conterrà quindi un massimo di 10 parole ognuna composta di un massimo di 20 caratteri. La prima parola è contenuta in vocab[0] e con vocab[2][7], qualora dovesse interessare, si individuerebbe l’ottavo carattere della terza parola del vocabolario. Ogni riga della tabella conterrà una parola e in ogni colonna ci sono i caratteri che compongono le parole. L’array parcerc[20] servirà per contenere la parola da cercare.
  • 21. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione gets(vocab[i]); /*3*/ Nella riga 3 si acquisiscono le parole da inserire nel vocabolario: la prima volta l’istruzione si leggerà gets(vocab[0]), quindi gets(vocab[1]) e infine gets(vocab[9]) in relazione ai diversi valori assunti dal contatore i. L’uso di un solo indice dipende dal fatto che, con la gets, si acquisisce una stringa e quindi nel nostro caso una intera riga della matrice. Se avessimo voluto acquisire le stringhe un carattere per volta, si sarebbero dovuti gestire due cicli uno annidato nell’altro, contenenti l’istruzione scanf("%c",&vocab[i][j]). Alla fine avremmo dovuto aggiungere il carattere null.
  • 22. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione while (strcmp(parcerc,"")) { /*4*/ Nella riga 4 si gestisce la condizione di uscita dal ciclo. La stringa ricevuta dall’input viene comparata con la stringa vuota (due doppi apici consecutivi): se alla richiesta di input della stringa da cercare si risponde premendo solamente il tasto Invio, viene acquisita una stringa contenente solo il carattere terminatore null. Ciò rende falsa la condizione e quindi il ciclo ha termine (strcmp in questo caso restituisce 0).
  • 23. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione trovata=0; /*5*/ La variabile trovata che viene azzerata nella riga 5 registrerà l’eventuale ritrovamento della stringa all’interno del vocabolario. Il valore assegnato non ha il senso di un valore numerico a tutti gli effetti ma il senso di un valore logico (0 = falso, un valore non nullo=vero). Una variabile usata in questo modo viene chiamata solitamente variabile logica, switch o flag.
  • 24. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione if (!strcmp(parcerc,vocab[i])) { /*6*/ Nella 6 si confronta la parola da cercare via via con le parole contenute nel vocabolario. L’equivalenza delle due stringhe, quella da cercare e la parola del vocabolario esaminata, rende vera la condizione.
  • 25. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione trovata=1; /*7*/ break; /*8*/ In questo caso, riga 7, si rende vera la variabile trovata assegnandole un valore non nullo e con la break della riga 8 si forza l’uscita dal ciclo poiché è inutile continuare a confrontare la parola cercata con il resto delle parole del vocabolario: la ricerca viene sospesa.
  • 26. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione if (trovata) /*9*/ Nella riga 9 si esegue un test sul flag trovata: se è vero (cioè è stata eseguita l’istruzione della riga 7) la parola è stata trovata, se è falso (è rimasto inalterato il valore assegnato nella istruzione della riga 5) la ricerca ha avuto esito negativo.
  • 27. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Le stringhe e i puntatori Un metodo comunemente utilizzato per dichiarare e manipolare stringhe nei programmi è offerto dai puntatori. Come si vede nel programma dell'esempio seguente, che visualizza "Ciao Ciao" e porta a capo il cursore.
  • 28. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Esempio #include <stdio.h> char *string = "Ciao"; void main(void) { printf(string); printf(" %s n",string); }
  • 29. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione char *string = "Ciao"; La dichiarazione di string può apparire, a prima vista, anomala. Si tratta infatti, a tutti gli effetti, della dichiarazione di un puntatore e la stranezza consiste nel fatto che a questo non è assegnato un indirizzo di memoria, come ci si potrebbe aspettare, bensì una costante stringa. Ma è proprio questo l'artificio che consente di gestire le stringhe con normali puntatori a carattere: il compilatore, in realtà, assegna a string, puntatore a 16 bit, l'indirizzo della costante "Ciao".
  • 30. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione Dunque la word occupata da string non contiene la parola "Ciao", ma i 16 bit che esprimono la parte offset del suo indirizzo. A sua volta, "Ciao" occupa 5 byte di memoria. Proprio 5, non si tratta di un errore di stampa: i 4 byte necessari a memorizzare i 4 caratteri che compongono la parola, più un byte, nel quale il compilatore memorizza il valore binario 0, detto terminatore di stringa o null terminator. In C, tutte le stringhe sono chiuse da un null terminator, ed occupano perciò un byte in più del numero di caratteri "stampabili" che le compongono.
  • 31. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione printf(string); La prima chiamata a printf() passa quale argomento proprio string: dunque la stringa parametro indispensabile di printf() non deve essere necessariamente una stringa di formato quando l'unica cosa da visualizzare sia proprio una stringa. Lo è, però, quando devono essere visualizzati caratteri o numeri, o stringhe formattate in un modo particolare, come avviene nella seconda chiamata. printf(" %s n",string);
  • 32. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Osservazioni Per visualizzare una stringa con printf() occore fornirne l'indirizzo, che nel nostro caso è il contenuto del puntatore string. Se string punta alla stringa "Ciao", che cosa restituisce l'espressione *string? La tentazione di rispondere "Ciao" è forte, ma se così fosse perché per visualizzare la parola occorre passare a printf() string e non *string?
  • 33. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Osservazioni Il problema non si poneva con gli esempi precedenti, perché tutti i puntatori esaminati indirizzavano un unico dato di un certo tipo. Con le dichiarazioni: float numero = 12.5; float *numPtr = &numero; si definisce il puntatore numPtr e lo si inizializza in modo che contenga l'indirizzo della variabile numero, la quale, in fondo proprio come string, occupa più di un byte. In questo caso, però, i 4 byte di numero contengono un dato unitariamente considerato.
  • 34. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Osservazioni In altre parole, nessuno dei 4 byte che la compongono ha significato in sé e per sé. Con riferimento a string, al contrario, ogni byte è un dato a sé stante, cioè un dato di tipo char: bisogna allora precisare che un puntatore indirizza sempre il primo byte di tutti quelli che compongono il tipo di dato considerato, se questi sono più d'uno. Se ne ricava che string contiene, in realtà, l'indirizzo del primo carattere di "Ciao", cioè la 'C'. Allora *string non può che restituire proprio quella, come si può facilmente verificare con la seguente chiamata a printf(): printf("%c è il primo carattere...n",*string);
  • 35. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Le stringhe come sequenze di caratteri Le stringhe sono, per il compilatore C, semplici sequenze di char: la stringa del nostro esempio: char *string = "Ciao"; inizia con il char che si trova all'indirizzo contenuto in string (la 'C') e termina con il primo byte nullo incontrato ad un indirizzo uguale o superiore a quello del primo carattere (nell’esempio il byte che segue immediatamente la 'o'). Per accedere ai caratteri che seguono il primo è sufficiente incrementare il puntatore o, comunque, sommare ad esso una opportuna quantità (che rappresenta l'offset, cioè lo spostamento, dall'inizio della stringa stessa).
  • 36. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Esempio int i = 0; while(*(string+i) != 0) { printf("%cn",*(string+i)); ++i; } L'esempio si basa sull'aritmetica dei puntatori, cioè sulla possibilità di accedere ai dati memorizzati ad un certo offset rispetto ad un indirizzo sommandovi algebricamente numeri interi.
  • 37. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione while(*(string+i) != 0) { printf("%cn",*(string+i)); ++i; } Il ciclo visualizza la stringa "Ciao" in senso verticale. Infatti l'istruzione while esegue le istruzioni comprese tra le parentesi graffe finché la condizione espressa tra le parentesi tonde è vera (se questa è falsa la prima volta, il ciclo non viene mai eseguito): in questo caso la printf() è eseguita finché il byte che si trova all'indirizzo contenuto in string aumentato di i unità è diverso da 0, cioè finché non viene incontrato il null terminator.
  • 38. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione printf("%cn",*(string+i)); La printf() visualizza il byte a quello stesso indirizzo e va a capo. Il valore di i è inizialmente 0, pertanto nella prima iterazione l'indirizzo espresso da string non è modificato, ma ad ogni loop i è incrementato di 1 (tale è il significato dell'operatore ++), pertanto ad ogni successiva iterazione l'espressione string+i restituisce l'indirizzo del byte successivo a quello appena visualizzato.
  • 39. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Descrizione Al termine, i contiene il valore 4, che è anche la lunghezza della stringa: questa è infatti convenzionalmente pari al numero dei caratteri stampabili che compongono la stringa stessa; il null terminator non viene considerato. int i = 0; while(*(string+i) != 0) { printf("%cn",*(string+i)); ++i; } In altre parole la lunghezza di una stringa è inferiore di 1 al numero di byte che essa occupa effettivamente in memoria.
  • 40. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Lunghezza di una stringa La lunghezza di una stringa può quindi essere calcolata così: unsigned i = 0; while(*(string+i)) ++i; La condizione tra parentesi è implicita: non viene specificato alcun confronto. In casi come questo il compilatore assume che il confronto vada effettuato con il valore 0, che è proprio quel che fa al nostro caso. Inoltre, dato che il ciclo si compone di una sola riga (l'autoincremento di i), le graffe non sono necessarie.
  • 41. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Osservazione Quando ad una funzione viene passata una costante stringa, come in: printf("Ciao!n"); il compilatore, astutamente, memorizza la costante e ne passa l'indirizzo.
  • 42. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Esempio: modifica di una stringa char *string = "Rosson"; Void main(void) { printf(string); *(string+3) = 'p'; printf(string); } Il programma dell'esempio visualizza dapprima la parola "Rosso" e poi "Rospo".
  • 43. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Osservazioni Il valore di string non è mutato: esso continua a puntare alla medesima locazione di memoria, ma è mutato il contenuto del byte che si trova ad un offset di 3 rispetto a quell'indirizzo. Dal momento che l'indirezione di un puntatore a carattere restituisce un carattere, nell'assegnazione della lettera 'p' è necessario esprimere quest'ultima come un char, e pertanto tra apici (e non tra virgolette). La variabile string non a casp è dichiarata all'esterno di main().
  • 44. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Come troncare una stringa Per troncare una stringa basta inserire un NULL dove occorre: *(string+2) = NULL; A questo punto una chiamata a printf() visualizzerebbe la parola "Ro". NULL è una costante manifesta definita in STDIO.H, e rappresenta lo zero binario; infatti la riga di codice precedente potrebbe essere scritta così: *(string+2) = 0;
  • 45. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Come allungare una stringa Se si sovrascrive il NULL con un carattere, la stringa si allunga sino al successivo NULL. Occorre fare alcune considerazioni:  in primo luogo, tale operazione ha senso, di solito, solo nel caso di concatenamento di stringhe (quando cioè si desidera accodare una stringa ad un'altra per produrne una sola, più lunga).  In secondo luogo, se i byte successivi al NULL sono occupati da altri dati, questi vengono perduti, sovrascritti dai caratteri concatenati alla stringa: l'effetto può essere disastroso.  Abbiamo visto che esiste una funzione di libreria concepita appositamente per concatenare le stringhe: la strcat(), che richiede due stringhe quali parametri. L'azione da essa svolta consiste nel copiare i byte che compongono la seconda stringa, NULL terminale compreso, in coda alla prima stringa, sovrascrivendone il NULL terminale.
  • 46. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” Osservazioni In una dichiarazione come quella di string, il compilatore riserva alla stringa lo spazio strettamente necessario a contenere i caratteri che la compongono, più il NULL. E' evidente che concatenare a string un'altra stringa sarebbe un grave errore (peraltro non segnalato dal compilatore, perché esso lascia il programmatore libero di gestire la memoria come crede: se sbaglia, peggio per lui).
  • 47. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” E' meglio sottolineare che le librerie standard del C comprendono un gran numero di funzioni (dichiarate in STRING.H) per la manipolazione delle stringhe, che effettuano le più svariate operazioni: copiare stringhe o parte di esse (strcpy(), strncpy()), concatenare stringhe (strcat(), strncat()), confrontare stringhe (strcmp(), stricmp()), ricercare sottostringhe o caratteri all'interno di stringhe (strstr(), strchr(), strtok())...
  • 48. Ing. Cristian Randieri – Lezioni di programmazione in C: ”Le stringhe” FINE