G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di...

53
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1

Transcript of G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di...

Page 1: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Programmazione di CalcolatoriProgrammazione di Calcolatori

Lezione XIXLe stringhe

Programmazione di Calcolatori: le stringhe 1

Page 2: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Premessa:Premessa:

Programmazione di Calcolatori: le stringhe 2

• Il tipo charLunghezza: 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)

Page 3: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La tabella dei codici ASCIILa tabella dei codici ASCII

Programmazione di Calcolatori: le stringhe 3

Tab

ella

dei co

dic

i A

SC

II

Page 4: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Le stringhe in memoriaLe stringhe in memoria

Programmazione di Calcolatori: le stringhe 4

‘s’‘t’‘r’‘i’‘n’‘g’‘a’‘\0’

• Stringa:

ogni sequenza di caratteri memorizzati in locazioni contigue di memoria e terminata dal carattere ‘\0’, detto carattere di fine stringa

xxxxxxxxxx

Page 5: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Definizione di una stringaDefinizione di una stringa

Programmazione di Calcolatori: le stringhe 5

• 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

Page 6: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

I/O di stringheI/O di stringhe

Programmazione di Calcolatori: le stringhe 6

• 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.

Page 7: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

I/O di stringheI/O di stringhe

Programmazione di Calcolatori: le stringhe 7

• 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

Page 8: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Ingresso/uscita di stringheIngresso/uscita di stringhe

Programmazione di Calcolatori: le stringhe 8

// 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// chiamanteint 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));

if (Str1 == NULL)return(0);

char *Str2 = (char *) malloc((STR_LENGTH+1)*sizeof(char));

if (Str2 == NULL){free(Str1);return(0);

};

Con

tinu

a …

Page 9: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Ingresso/uscita di stringheIngresso/uscita di stringhe

Programmazione di Calcolatori: le stringhe 9

// 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);

}

Page 10: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

I/O di stringheI/O di stringhe

Programmazione di Calcolatori: le stringhe 10

• Compilazione:

• Esecuzione:

• Esecuzione:

Page 11: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

I/O di stringheI/O di stringhe

Programmazione di Calcolatori: le stringhe 11

• Esecuzione:

Page 12: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

Stringhe costantiStringhe costanti

Programmazione di Calcolatori: le stringhe 12

• 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>// chiamanteint main ()

{// visualizza due diverse stringhe costantiprintf("\n%s", "Vado a casa");printf("\n%s\n", "Vado a \0 casa");return(0);};

Page 13: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

I/O di stringheI/O di stringhe

Programmazione di Calcolatori: le stringhe 13

• Compilazione:

• Esecuzione:

Page 14: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso Input di linee di testo da tastiera: Input di linee di testo da tastiera:

fgets()fgets()

Programmazione di Calcolatori: le stringhe 14

• 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

• Valore restituito:l’indirizzo dst

ultimo carattere di ogni file (End Of

File)

Page 15: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso Acquisizione di linee di Acquisizione di linee di

inputinput

Programmazione di Calcolatori: le stringhe 15

// 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// chiamanteint 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 stringaprintf("\nStringa acquisita: %s", Str);

Con

tinu

a …

Page 16: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso Acquisizione di linee di Acquisizione di linee di

inputinput

Programmazione di Calcolatori: le stringhe 16

// libera la memoria allocata per la stringafree(Str);return(1);};

Page 17: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso Acquisizione di una linea di Acquisizione di una linea di

inputinput

Programmazione di Calcolatori: le stringhe 17

• Compilazione:

• Esecuzione:

Page 18: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso Direttiva per il Direttiva per il

preprocessorepreprocessore

Programmazione di Calcolatori: le stringhe 18

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>

Page 19: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strlen()La funzione strlen()

Programmazione di Calcolatori: le stringhe 19

• Signature: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

dichiara che la funzione non modificherà il

contenuto della stringa

Page 20: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strlen()La funzione strlen()

Programmazione di Calcolatori: le stringhe 20

• Esempio:

int main (){// definisce la stringachar *str = (char *) malloc (...);// definisce la variabile per la

lunghezza// della stringasize_t lung;

….

// assegna alla variabile la lunghezza// della stringalung = strlen(stringa);….}

5

char *str ‘p’‘r’‘o’‘v’‘a’‘\0’

Page 21: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso La funzione strlen()La funzione strlen()

Programmazione di Calcolatori: le stringhe 21

// 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// chiamanteint 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 terminaif (Str == NULL)

return(0);// acquisisce il contenuto della stringa

printf("\nStringa? "); scanf("%s", Str);

Con

tinu

a …

Page 22: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strlen()La funzione strlen()

Programmazione di Calcolatori: le stringhe 22

// 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);

};

Page 23: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strlen()La funzione strlen()

Programmazione di Calcolatori: le stringhe 23

• Compilazione:

• Esecuzione:

Page 24: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcpy()La funzione strcpy()

Programmazione di Calcolatori: le stringhe 24

• 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

Page 25: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcpy()La funzione strcpy()

Programmazione di Calcolatori: le stringhe 25

• Esempio:

int main (){// definisce la stringa destinazione e// la stringa sorgentechar *dst = (char *) malloc (...);char *src = (char *) malloc (...);

….

// copia la stringa sorgente sulla// destinazione e visualizza il// risultato dell’operazioneprintf(“%s”, strcpy(dst, src));…}

dst

‘r’‘o’‘n’‘t’‘i’

‘\0’

‘v’‘i’‘a’‘\0’

‘p’char *dst;

char *src;

‘a’‘\0’

‘v’‘i’

Page 26: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcpy()La funzione strcpy()

Programmazione di Calcolatori: le stringhe 26

// 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// chiamanteint 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);

Con

tinu

a …

Page 27: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcpy()La funzione strcpy()

Programmazione di Calcolatori: le stringhe 27

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// destinazionefree(Srg);free(Dst);

return(1);};

Page 28: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcpy()La funzione strcpy()

Programmazione di Calcolatori: le stringhe 28

• Compilazione:

• Esecuzione:

Page 29: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 29

• 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

Page 30: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 30

• Esempio:

int main (){// definisce la stringa destinazione e// la stringa sorgentechar *dst = (char *) malloc (...);char *src = (char *) malloc (...);

….

// copia due caratteri della stringa // sorgente sulla destinazione e// visualizza il risultatoprintf(“%s”, strncpy(dst, src, 2));…}

dst

‘o’‘r’‘t’‘a’‘\0’

‘c’‘a’‘s’‘a’‘\0’

‘t’char *dst;

char *src;

‘c’‘a’

Page 31: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 31

• Esempio:

int main (){// definisce la stringa destinazione e

la stringa// sorgentechar *dst = (char *) malloc (...);char *src = (char *) malloc (...);

….

// copia quattro caratteri della// stringa sorgente sulla destinazione// e visualizza il risultatoprintf(“%s”, strncpy(dst, src, 8));…}

dst

‘r’‘o’‘n’‘t’‘i’

‘\0’

‘v’‘i’‘a’‘\0’

‘p’char *dst;

char *src;

‘a’

‘v’‘i’

‘\0’

Page 32: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 32

// 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// chiamanteint 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 terminaSrc = (char *) malloc((STR_LENGTH+1)*sizeof(char));if (Src == NULL)

return(0);

Con

tinu

a …

Page 33: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 33

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 copiareprintf("\nNumero di caratteri? ");scanf("%u", &nro);// copia nro caratteri dalla stringa sorgente sulla

destinazione e// visualizza il risultato dell’operazioneprintf("\nDestinazione: %s\n", strncpy(Dst, Srg, nro));// rilascia la memoria allocata per le stringhe

free(Src); free(Dst);return(1);};

Page 34: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 34

• Compilazione:

• Esecuzione:

Page 35: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncpy()La funzione strncpy()

Programmazione di Calcolatori: le stringhe 35

• Esecuzione:

Page 36: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcat()La funzione strcat()

Programmazione di Calcolatori: le stringhe 36

• 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

Page 37: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcat()La funzione strcat()

Programmazione di Calcolatori: le stringhe 37

• Esempio:

int main (){// definisce la stringa destinazione e

la stringa// sorgentechar *Src = (char *) malloc (...);char *Dst = (char *) malloc (...);

….

// concatena la stringa sorgente// alla destinazione e visualizza// il risultatoprintf(“%s”, strcat(Src, Dst));…}

Dst

‘o’‘\0’

‘r’‘t’‘o’‘\0’

‘c’char *Dst;

char *Src;

‘r’‘t’‘o’‘\0’

Page 38: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcat()La funzione strcat()

Programmazione di Calcolatori: le stringhe 38

// 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// chiamanteint 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 terminaSrc = (char *) malloc((STR_LENGTH+1)*sizeof(char));if (Src == NULL)

return(0);

Con

tinu

a …

Page 39: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcat()La funzione strcat()

Programmazione di Calcolatori: le stringhe 39

Dst = (char *) malloc((STR_LENGTH+1)*sizeof(char));if (Dst == NULL)

{free(Src);return(0);};

// concatena uno spazio bianco alla stringa destinazionestrcat(Dst, " ");// concatena la stringa sorgente alla destinazione e visualizza il// risultato dell’operazioneprintf("\nDestinazione: %s\n", strcat(Dst, Src));// rilascia la memoria allocata per le stringhe

free(Src); free(Dst);return(1);};

Page 40: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcat()La funzione strcat()

Programmazione di Calcolatori: le stringhe 40

• Compilazione:

• Esecuzione:

Page 41: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncat()La funzione strncat()

Programmazione di Calcolatori: le stringhe 41

• 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

Page 42: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncat()La funzione strncat()

Programmazione di Calcolatori: le stringhe 42

• Esempio:

int main (){// definisce la stringa destinazione e

la stringa// sorgentechar *Dst = (char *) malloc (...);char *Src = (char *) malloc (...);

….

// concatena i primi 2 caratteri della// stringa sorgente alla destinazione// e visualizza il risultatoprintf(“%s”, strcat(Src, Dst,2));…}

Dst

‘a’‘p’‘\0’

‘p’‘o’‘c’‘o’‘\0’

‘t’char *Dst;

char *Src;

‘\0’

‘p’‘o’

Page 43: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso La funzione strncat()La funzione strncat()

Programmazione di Calcolatori: le stringhe 43

// 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// chiamanteint main () { // definisce la stringa destinazione, la stringa sorgente

// e una variabile per il numero di caratteri da copiarechar *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 terminaSrc = (char *) malloc((STR_LENGTH+1)*sizeof(char));if (Src == NULL)

return(0);Dst = (char *) malloc((STR_LENGTH+1)*sizeof(char));

Con

tinu

a …

Page 44: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso La funzione strncat()La funzione strncat()

Programmazione di Calcolatori: le stringhe 44

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);

};

Page 45: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncat()La funzione strncat()

Programmazione di Calcolatori: le stringhe 45

• Compilazione:

• Esecuzione:

Page 46: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strncat()La funzione strncat()

Programmazione di Calcolatori: le stringhe 46

• Esecuzione:

Page 47: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcmp()La funzione strcmp()

Programmazione di Calcolatori: le stringhe 47

• 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.

Page 48: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcmp()La funzione strcmp()

Programmazione di Calcolatori: le stringhe 48

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

Page 49: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcmp()La funzione strcmp()

Programmazione di Calcolatori: le stringhe 49

// 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// chiamanteint main () {

// defisce le due stringhe oggetto del confrontochar *Str1, *Str2;// alloca memoria per le due stringhe. Se l’operazione ha esito

negativo, // recupera la memoria eventualmente allocate e terminaStr1 = (char *) malloc((STR_LENGTH+1)*sizeof(char));if (Str1 == NULL)

return(0);Str2 = (char *) malloc((STR_LENGTH+1)*sizeof(char));

Con

tinu

a …

Page 50: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcmp()La funzione strcmp()

Programmazione di Calcolatori: le stringhe 50

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);

};

Page 51: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcmp()La funzione strcmp()

Programmazione di Calcolatori: le stringhe 51

• Compilazione:

• Esecuzione:

Page 52: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

La funzione strcmp()La funzione strcmp()

Programmazione di Calcolatori: le stringhe 52

• Esecuzione:

• Esecuzione:

Page 53: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe 1.

G. Amodeo,C. Gaibisso

RaccomandazioneRaccomandazione

Programmazione di Calcolatori: le stringhe 53

Attenzione!!!

Consultare la manualistica per avere un quadro esaustivo delle

funzioni per la manipolazione delle stringhe messe a

disposizione dalle librerie del C