G. Amodeo,
C. Gaibisso
Programmazione di Calcolatori
Lezione XIX
Le stringhe
Programmazione di Calcolatori: le stringhe
1
G. Amodeo,
C. Gaibisso
Premessa:
• Il tipo char
Lunghezza:
8 bit
Range:
da -128 a 127
Definizione:
char nomevariabile;
• Costanti di tipo char:
carattere racchiuso tra apici, equivale al
valore del codice ASCII per il carattere
Esempio: -
‘S’ (codice ASCII: 83)
‘c’ (codice ASCII: 67)
‘,’ (codice ASCII: 44)
‘+’ (codice ASCII: 43)
Programmazione di Calcolatori: le stringhe
2
La tabella dei codici ASCII
Tabella dei codici ASCII
G. Amodeo,
C. Gaibisso
Programmazione di Calcolatori: le stringhe
3
G. Amodeo,
C. Gaibisso
Le stringhe in memoria
• Stringa:
ogni sequenza di caratteri
memorizzati in locazioni
contigue di memoria e
terminata dal carattere ‘\0’,
detto carattere di fine stringa
‘s’
‘t’
‘r’
‘i’
‘n’
‘g’
‘a’
‘\0’
Programmazione di Calcolatori: le stringhe
x
x
x
x
x
x
x
x
x
x
4
G. Amodeo,
C. Gaibisso
Definizione di una stringa
• Allocazione dinamica:
// definisce la lunghezza massima di una stringa,
// ‘\0’ escluso
#define STR_LENGTH 80
…
// assegna un nome alla stringa e le alloca memoria
char *nomestringa=(char *) malloc(STR_LENGTH+1*
sizeof(char));
Alternativa:
char nomestringa[STR_LENGTH+1];
Attenzione!!! Impone, tra l’altro, dei vincoli notevoli
sull’utilizzo delle funzioni per la gestione delle stringhe
Programmazione di Calcolatori: le stringhe
5
G. Amodeo,
C. Gaibisso
I/O di stringhe
• Acquisizione:
scanf(“%s”, dst);
con dst espressione di tipo char * e %s specificatore di
formato per le stringhe
• Modifiche allo stato della memoria:
1. elimina dallo stream di input qualunque sequenza
iniziale di caratteri in un insieme di delimitatori (‘\n’,
‘ ‘,‘\r’, …);
2. copia caratteri dallo stream di input, fino al primo di
un insieme di delimitatori (‘\n’, ‘ ‘,‘\r’, …) escluso, in
memoria a partire dall’indirizzo dst;
3. memorizza ‘\0’ a partire dalla locazione successiva
all’ultima utilizzata per l’acquisizione.
Più informalmente:
memorizza i caratteri acquisiti nella stringa dst.
Programmazione di Calcolatori: le stringhe
6
G. Amodeo,
C. Gaibisso
I/O di stringhe
• Restituzione:
printf(“%s”, src);
con src espressione di tipo char * e %s
specificatore di formato per le stringhe
• Effetto:
visualizza i caratteri memorizzati a partire
dall’indirizzo src fino al primo ‘\0’
Più informalmente:
visualizza la stringa src
Programmazione di Calcolatori: le stringhe
7
G. Amodeo,
C. Gaibisso
Ingresso/uscita di stringhe
// sorgente: Lezione_XIX\StrIO.c
// illustra le modalità di acquisizione e restituzione di stringhe
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale e funzionali alle varie operazioni di I/O
#include <stdio.h>
#include <stdlib.h>
// definisce la lunghezza massima prevista per una stringa, ‘\0’ escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// definisce e alloca memoria per due stringhe. Se l'allocazione ha esito
// negativo, recupera la memoria eventualmente allocata e termina
char *Str1 = (char *) malloc((STR_LENGTH+1)*sizeof(char));
char *Str2 = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Str2 == NULL)
{
free(Str1);
return(0);
};
Programmazione di Calcolatori: le stringhe
Continua …
if (Str1 == NULL)
return(0);
8
G. Amodeo,
C. Gaibisso
Ingresso/uscita di stringhe
// acquisisce il contenuto delle due stringhe
printf("\nPrima Stringa? ");
scanf("%s", Str1);
printf("\nSeconda Stringa? ");
scanf("%s", Str2);
// restituisce il contenuto delle due stringhe
printf("\nPrima stringa: %s", Str1);
printf("\nSeconda stringa: %s\n", Str2);
// libera la memoria allocata per le stringhe
free(Str1);
free(Str2);
return(1);
}
Programmazione di Calcolatori: le stringhe
9
G. Amodeo,
C. Gaibisso
I/O di stringhe
• Compilazione:
• Esecuzione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
10
G. Amodeo,
C. Gaibisso
I/O di stringhe
• Esecuzione:
Programmazione di Calcolatori: le stringhe
11
G. Amodeo,
C. Gaibisso
Stringhe costanti
• Stringa costante:
sequenza di caratteri racchiusa tra doppi apici
• Esempio:
 “lkasdj jp656 #@!”
 “Sono andato a casa”
• Esempio:
// sorgente: Lezione_XIX\StrCost.c
// illustra un semplice esempio di uso delle stringhe costanti
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi funzionali alle varie operazioni di I/O
#include <stdio.h>
// chiamante
int main ()
{
// visualizza due diverse stringhe costanti
printf("\n%s", "Vado a casa");
printf("\n%s\n", "Vado a \0 casa");
return(0);
};
Programmazione di Calcolatori: le stringhe
12
G. Amodeo,
C. Gaibisso
I/O di stringhe
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
13
G. Amodeo,
C. Gaibisso
Input di linee di testo da tastiera: fgets()
• Signature:
char * fgets(char *dst, size_t length, FILE *stream)
• Modifiche allo stato della memoria:
1. copia caratteri dallo stream di input in memoria a
partire dall’indirizzo dst. Termina:
• al raggiungimento di un ‘\n’ o di un EOF ;
• in ogni caso dopo aver copiato length-1 caratteri;
2. memorizza ‘\0’ a partire dalla locazione successiva
all’ultima utilizzata per l’acquisizione.
Più informalmente:
copia length-1caratteri dallo stream di input, se disponibili,
nella stringa dst
ultimo carattere di ogni
• Valore restituito:
file (End Of File)
l’indirizzo dst
Programmazione di Calcolatori: le stringhe
14
G. Amodeo,
C. Gaibisso
Acquisizione di linee di input
Continua …
// sorgente: Lezione_XIX\LineInput.c
// illustra le modalità di acquisizione di una linea di input attraverso la fgets()
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi funzionali alle varie operazioni di I/O e di interesse generale
#include <stdio.h>
#include <stdlib.h>
// definisce la lunghezza massima prevista per una linea di input, '\0' escluso
#define IN_LINE_LENGTH 80
// chiamante
int main ()
{
// definisce e alloca memoria per una stringa
char *Str = (char *) malloc((IN_LINE_LENGTH+1)*sizeof(char));
// se l'allocazione ha esito negativo termina
if (Str == NULL)
return(0);
// memorizza al piu’ IN_LINE_LENGTH caratteri dell'input nella stringa
printf("\nInput? ");
fgets(Str, IN_LINE_LENGTH+1, stdin);
// restituisce il contenuto della stringa
printf("\nStringa acquisita: %s", Str);
Programmazione di Calcolatori: le stringhe
15
G. Amodeo,
C. Gaibisso
Acquisizione di linee di input
// libera la memoria allocata per la stringa
free(Str);
return(1);
};
Programmazione di Calcolatori: le stringhe
16
G. Amodeo,
C. Gaibisso
Acquisizione di una linea di input
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
17
G. Amodeo,
C. Gaibisso
Direttiva per il preprocessore
Attenzione!!!
Le librerie del C mettono a disposizione del
programmatore un insieme di funzioni per il
processamento delle stringhe. Per utilizzare tali
funzioni all’interno di un file è necessario
includere in testa allo stesso la direttiva per il
preprocessore:
# include <string.h>
Programmazione di Calcolatori: le stringhe
18
G. Amodeo,
C. Gaibisso
La funzione strlen()
• Signature:
dichiara che la funzione
non modificherà il
contenuto della stringa
size_t strlen (const char *str);
• Modifiche allo stato della memoria:
nessuno
• Valore restituito:
il numero di caratteri memorizzati a partire
dall’indirizzo str fino al primo '\0' escluso
Più informalmente:
la lunghezza della stringa str
Programmazione di Calcolatori: le stringhe
19
G. Amodeo,
C. Gaibisso
La funzione strlen()
• Esempio:
int main ()
char *str
‘p’
{
// definisce la stringa
‘r’
char *str = (char *) malloc (...);
‘o’
// definisce la variabile per la lunghezza
‘v’
// della stringa
‘a’
size_t lung;
‘\0’
….
5
// assegna alla variabile la lunghezza
// della stringa
lung = strlen(stringa);
….
}
Programmazione di Calcolatori: le stringhe
20
G. Amodeo,
C. Gaibisso
La funzione strlen()
Programmazione di Calcolatori: le stringhe
Continua …
// sorgente: Lezione_XIX\Strlen.c
// illustra le modalità di utilizzo della funzione strlen()
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale, funzionali alle varie operazioni di I/O
// e alla gestione delle stringhe, rispettivamente
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// definisce la lunghezza massima prevista per una stringa, ‘\0’ escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// defisce una stringa ed una variabile per la sua lunghezza
char *Str;
size_t lung;
// alloca memoria per la stringa
Str = (char *) malloc((STR_LENGTH+1)*sizeof(char));
// se l'esito dell'operazione e' negativo termina
if (Str == NULL)
return(0);
// acquisisce il contenuto della stringa
printf("\nStringa? ");
scanf("%s", Str);
21
G. Amodeo,
C. Gaibisso
La funzione strlen()
// assegna alla variabile e visualizza la lunghezza della stringa, ad
// esclusione del ‘\0’
printf("La lunghezza della stringa e': %u\n", lung = strlen(Str));
// libera la memoria allocata per la stringa
free(Str);
return(1);
};
Programmazione di Calcolatori: le stringhe
22
G. Amodeo,
C. Gaibisso
La funzione strlen()
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
23
G. Amodeo,
C. Gaibisso
La funzione strcpy()
• Signature:
char *strcpy(char *dst, const char *src);
• Modifiche allo stato della memoria:
copia la sequenza di caratteri di indirizzo
iniziale src, fino al primo '\0' incluso, a
partire dall’indirizzo dst.
Più informalmente:
copia la stringa src sulla stringa dst
• Valore restituito:
l’indirizzo dst
Programmazione di Calcolatori: le stringhe
24
G. Amodeo,
C. Gaibisso
La funzione strcpy()
• Esempio:
….
‘p’
‘v’
‘r’
‘i’
‘o’
‘a’
‘\0’
‘n’
‘t’
‘i’
‘\0’
// copia la stringa sorgente sulla
// destinazione e visualizza il
// risultato dell’operazione char *src;
printf(“%s”, strcpy(dst, src));
…
}
‘v’
‘i’
‘a’
‘\0’
char *dst;
int main ()
{
// definisce la stringa destinazione e
// la stringa sorgente
char *dst = (char *) malloc (...);
char *src = (char *) malloc (...);
dst
Programmazione di Calcolatori: le stringhe
25
G. Amodeo,
C. Gaibisso
La funzione strcpy()
Continua …
// sorgente: Lezione_XIX\Strcpy.c
// illustra le modalità di utilizzo della funzione strcpy()
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale, funzionali alle varie operazioni di I/O
// e alla gestione delle stringhe, rispettivamente
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// definisce la lunghezza massima prevista per una stringa, '\0' escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// definisce e alloca memoria per la stringa destinazione e la stringa
// sorgente. Se l’operazione ha esito negativo, recupera la memoria
// eventualmente allocate e termina
char *Dst , *Src;
Src = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Src == NULL)
return(0);
Programmazione di Calcolatori: le stringhe
26
G. Amodeo,
C. Gaibisso
La funzione strcpy()
Dst = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Dst == NULL)
{
free(src);
return(0);
};
// acquisisce il contenuto delle due stringhe
printf("\nDestinazione? ");
scanf("%s", Dst);
printf("\nSorgente? ");
scanf("%s", Src);
// copia la stringa sorgente sulla destinazione e visualizza il
// risultato dell’operazione
printf("\nDestinazione: %s\n", strcpy(Dst, Src));
// libera la memoria allocata per la stringa sorgente e la stringa
// destinazione
free(Srg);
free(Dst);
return(1);
};
Programmazione di Calcolatori: le stringhe
27
G. Amodeo,
C. Gaibisso
La funzione strcpy()
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
28
G. Amodeo,
C. Gaibisso
La funzione strncpy()
• Signature:
char *strcnpy(char *dst,
const char *src, size_t length);
• Modifiche allo stato della memoria:
copia la sequenza di caratteri di indirizzo
iniziale src a partire dall’indirizzo dst.
Termina dopo length caratteri o al primo '\0'
incontrato incluso.
Più informalmente:
copia length caratteri della stringa src sulla
stringa dst
• Valore restituito:
l’indirizzo dst
Programmazione di Calcolatori: le stringhe
29
G. Amodeo,
C. Gaibisso
La funzione strncpy()
• Esempio:
char *dst;
int main ()
{
// definisce la stringa destinazione e
// la stringa sorgente
char *dst = (char *) malloc (...);
char *src = (char *) malloc (...);
‘c’
‘t’
‘o’
‘a’
‘r’
‘t’
‘a’
‘\0’
….
// copia due caratteri della stringa
// sorgente sulla destinazione e
// visualizza il risultato
char *src;
printf(“%s”, strncpy(dst, src, 2));
…
}
dst
Programmazione di Calcolatori: le stringhe
‘c’
‘a’
‘s’
‘a’
‘\0’
30
G. Amodeo,
C. Gaibisso
La funzione strncpy()
• Esempio:
‘p’
‘v’
char *dst;
‘r’
‘i’
int main ()
{
‘o’
‘a’
// definisce la stringa destinazione e la stringa
‘\0’
‘n’
// sorgente
char *dst = (char *) malloc (...);
‘t’
char *src = (char *) malloc (...);
‘i’
….
‘\0’
// copia quattro caratteri della
// stringa sorgente sulla destinazione
‘v’
// e visualizza il risultato
char *src;
‘i’
printf(“%s”, strncpy(dst, src, 8));
‘a’
…
}
‘\0’
dst
Programmazione di Calcolatori: le stringhe
31
G. Amodeo,
C. Gaibisso
La funzione strncpy()
Programmazione di Calcolatori: le stringhe
Continua …
// sorgente: Lezione_XIX\Strncpy.c
// illustra le modalità di utilizzo della funzione strcnpy()
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale, funzionali alle varie operazioni di I/O
// e alla gestione delle stringhe, rispettivamente
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// definisce la lunghezza massima prevista per una stringa, '\0' escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// definisce la stringa destinazione, la stringa sorgente
// e una variabile per il numero di caratteri da copiare
char *Dst, *Srg;
size_t nro;
// alloca memoria per la stringa destinazione e la stringa
// sorgente. Se l’operazione ha esito negativo, recupera la
// memoria eventualmente allocate e termina
Src = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Src == NULL)
return(0);
32
G. Amodeo,
C. Gaibisso
La funzione strncpy()
Dst = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Dst == NULL)
{
free(src);
return(0);
};
// acquisisce il contenuto delle due stringhe
printf("\nDestinazione? "); scanf("%s", Dst);
printf("\nSorgente? ");
scanf("%s", Srg);
// acquisisce il numero di caratteri da copiare
printf("\nNumero di caratteri? ");
scanf("%u", &nro);
// copia nro caratteri dalla stringa sorgente sulla destinazione e
// visualizza il risultato dell’operazione
printf("\nDestinazione: %s\n", strncpy(Dst, Srg, nro));
// rilascia la memoria allocata per le stringhe
free(Src);
free(Dst);
return(1);
};
Programmazione di Calcolatori: le stringhe
33
G. Amodeo,
C. Gaibisso
La funzione strncpy()
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
34
G. Amodeo,
C. Gaibisso
La funzione strncpy()
• Esecuzione:
Programmazione di Calcolatori: le stringhe
35
G. Amodeo,
C. Gaibisso
La funzione strcat()
• Signature:
char *strcat(char *dst, const char *src);
• Modifiche allo stato della memoria:
copia la sequenza di caratteri di indirizzo
iniziale src, fino al primo '\0' incluso, a
partire dall’indirizzo del primo '\0'
successivo a dst
Più informalmente:
concatena la stringa src alla stringa dst
• Valore restituito:
l’indirizzo dst
Programmazione di Calcolatori: le stringhe
36
G. Amodeo,
C. Gaibisso
La funzione strcat()
• Esempio:
‘c’
char *Dst;
‘o’
int main ()
{
‘\0’
‘r’
// definisce la stringa destinazione e la stringa
‘t’
// sorgente
char *Src = (char *) malloc (...);
‘o’
char *Dst = (char *) malloc (...);
‘\0’
….
// concatena la stringa sorgente
// alla destinazione e visualizza
// il risultato
char *Src;
printf(“%s”, strcat(Src, Dst));
…
}
‘r’
‘t’
‘o’
‘\0’
Dst
Programmazione di Calcolatori: le stringhe
37
G. Amodeo,
C. Gaibisso
La funzione strcat()
Programmazione di Calcolatori: le stringhe
Continua …
// sorgente: Lezione_XIX\Strcat.c
// illustra le modalità di utilizzo della funzione strcat()
// concatenando due stringhe, separandole con uno spazio bianco
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale, funzionali alle varie operazioni di I/O
// e alla gestione delle stringhe, rispettivamente
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// definisce la lunghezza massima prevista per una stringa, '\0' escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// definisce la stringa destinazione e la stringa sorgente
char *Dst, *Src;
// alloca memoria per la stringa destinazione e la stringa
// sorgente. Se l’operazione ha esito negativo, recupera la
// memoria eventualmente allocate e termina
Src = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Src == NULL)
return(0);
38
G. Amodeo,
C. Gaibisso
La funzione strcat()
Dst = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Dst == NULL)
{
free(Src);
return(0);
};
// concatena uno spazio bianco alla stringa destinazione
strcat(Dst, " ");
// concatena la stringa sorgente alla destinazione e visualizza il
// risultato dell’operazione
printf("\nDestinazione: %s\n", strcat(Dst, Src));
// rilascia la memoria allocata per le stringhe
free(Src);
free(Dst);
return(1);
};
Programmazione di Calcolatori: le stringhe
39
G. Amodeo,
C. Gaibisso
La funzione strcat()
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
40
G. Amodeo,
C. Gaibisso
La funzione strncat()
• Signature:
char *strcncat(char *dst,
const char *src, size_t length);
• Modifiche allo stato della memoria:
copia i caratteri della sequenza di indirizzo
iniziale src, a partire dall’indirizzo del primo
'\0' successivo a dst.Termina dopo aver copiato
length caratteri o al primo '\0' incontrato
escluso. Termina la sequenza di caratteri
copiati con '\0'.
Più informalmente:
concatena i primi length caratteri della stringa
src alla stringa dst
• Valore restituito:
l’indirizzo dst
Programmazione di Calcolatori: le stringhe
41
G. Amodeo,
C. Gaibisso
La funzione strncat()
• Esempio:
int main ()
‘t’
char *Dst;
‘a’
{
‘p’
// definisce la stringa destinazione e la stringa
‘\0’
‘p’
// sorgente
char *Dst = (char *) malloc (...);
‘o’
char *Src = (char *) malloc (...);
‘\0’
….
// concatena i primi 2 caratteri della
// stringa sorgente alla destinazione
// e visualizza il risultato
char *Src;
printf(“%s”, strcat(Src, Dst,2));
…
}
‘p’
‘o’
‘c’
‘o’
‘\0’
Dst
Programmazione di Calcolatori: le stringhe
42
G. Amodeo,
C. Gaibisso
La funzione strncat()
Programmazione di Calcolatori: le stringhe
Continua …
// sorgente: Lezione_XIX\Strncat.c
// illustra le modalità di utilizzo della funzione strncat()
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale, funzionali alle varie operazioni di I/O
// e alla gestione delle stringhe, rispettivamente
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// definisce la lunghezza massima prevista per una stringa, '\0' escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// definisce la stringa destinazione, la stringa sorgente
// e una variabile per il numero di caratteri da copiare
char *Dst, *Src;
size_t nro;
// alloca memoria per la stringa destinazione e la stringa
// sorgente. Se l’operazione ha esito negativo, recupera la
// memoria eventualmente allocate e termina
Src = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Src == NULL)
return(0);
Dst = (char *) malloc((STR_LENGTH+1)*sizeof(char));
43
G. Amodeo,
C. Gaibisso
La funzione strncat()
if (Dst == NULL)
{
free(Src);
return(0);
};
// acquisisce il contenuto delle due stringhe
printf("\nDestinazione? ");
scanf("%s", Dst);
printf("\nSorgente? ");
scanf("%s", Src);
// acquisisce il numero di caratteri da concatenare
printf("\nNumero di caratteri? ");
scanf("%u", &nro);
// concatena nro caratteri della stringa sorgente alla destinazione e
// visualizza il risultato dell’operazione
printf("\nDestinazione: %s\n", strncat(Dst, Src, nro));
// rilascia la memoria allocata per le stringhe
free(Src);
free(Dst);
return(1);
};
Programmazione di Calcolatori: le stringhe
44
G. Amodeo,
C. Gaibisso
La funzione strncat()
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
45
G. Amodeo,
C. Gaibisso
La funzione strncat()
• Esecuzione:
Programmazione di Calcolatori: le stringhe
46
G. Amodeo,
C. Gaibisso
La funzione strcmp()
• Signature:
int strcmp(const char *str1, const char *str2)
• Modifiche allo stato della memoria:
Alcuna
• Valore restituito:
confronta carattere per carattere le due
sequenze di caratteri di indirizzo iniziale str1 e
str2.
Termina al raggiungimento del primo '\0' o
della prima coppia di caratteri differenti.
Nel primo caso, siano c1 e c2 l’ultima coppia di
caratteri raggiunti (almeno uno tra di loro è
'\0') a partire da str1 e da str2, rispettivamente.
Programmazione di Calcolatori: le stringhe
47
G. Amodeo,
C. Gaibisso
La funzione strcmp()
Restituisce:
• 0 se c1 = c2 = ‘\0’;
• un valore negativo se c1 = ‘\0’ e c2 ≠ ‘\0’
• un valore positivo se c1 ≠ ‘\0’ e c2 = ‘\0’
Nel secondo caso siano c1 e c2 l’ultima coppia
di caratteri confrontati (c1, c2 ≠ ‘\0’; c1≠ c2 ), a
partire da str1 e da str2, rispettivamente.
Restituisce:
• un valore negativo se c1 < c2 (codici ASCII)
• un valore positivo se c1 > c2
Più informalmente:
restituisce un intero il cui segno identifica il
risultato del confronto lessicografico tra str1 e
str2
Programmazione di Calcolatori: le stringhe
48
G. Amodeo,
C. Gaibisso
La funzione strcmp()
Programmazione di Calcolatori: le stringhe
Continua …
// sorgente: Lezione_XIX\Strcmp.c
// illustra le modalità di utilizzo della funzione strcmp()
// inclusione del file di intestazione della libreria standard che
// contiene definizioni di macro, costanti e dichiarazioni di funzioni
// e tipi di interesse generale, funzionali alle varie operazioni di I/O
// e alla gestione delle stringhe, rispettivamente
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// definisce la lunghezza massima prevista per una stringa, '\0' escluso
#define STR_LENGTH 80
// chiamante
int main ()
{
// defisce le due stringhe oggetto del confronto
char *Str1, *Str2;
// alloca memoria per le due stringhe. Se l’operazione ha esito negativo,
// recupera la memoria eventualmente allocate e termina
Str1 = (char *) malloc((STR_LENGTH+1)*sizeof(char));
if (Str1 == NULL)
return(0);
Str2 = (char *) malloc((STR_LENGTH+1)*sizeof(char));
49
G. Amodeo,
C. Gaibisso
La funzione strcmp()
if (Str2 == NULL)
{
free(Str1);
return(0);
};
// acquisisce il contenuto delle due stringhe
printf("\nI Stringa? ");
scanf("%s", Str1);
printf("\nII Stringa? ");
scanf("%s", Str2);
// confronta lessicograficamente le due stringhe e visualizza il risultato
// del confronto
if (strcmp(Str1, Str2) > 0)
printf("\n%s > %s\n", Str1, Str2);
else
if (strcmp(Str1, Str2) < 0)
printf("\n%s < %s\n", Str1, Str2);
else
printf("\n%s = %s\n", Str1, Str2);
// rilascia la memoria allocata per le stringhe
free(Str1);
free(Str2);
return(1);
};
Programmazione di Calcolatori: le stringhe
50
G. Amodeo,
C. Gaibisso
La funzione strcmp()
• Compilazione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
51
G. Amodeo,
C. Gaibisso
La funzione strcmp()
• Esecuzione:
• Esecuzione:
Programmazione di Calcolatori: le stringhe
52
G. Amodeo,
C. Gaibisso
Raccomandazione
Attenzione!!!
Consultare la manualistica per avere un
quadro esaustivo delle funzioni per la
manipolazione delle stringhe messe a
disposizione dalle librerie del C
Programmazione di Calcolatori: le stringhe
53
Scarica

Stringa - Informatica