Programmazione di Calcolatori

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Puntatori Linguaggio C.
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Stringhe di caratteri In linguaggio C.
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Introduzione al linguaggio C
Programmazione Procedurale in Linguaggio C++
FUNZIONI DI BIBLIOTECA
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Array Un array è una collezione in sequenza di variabili del medesimo tipo Riferimento con un nome comune Nome_studente1 Nome_studente2. Nome_studenteN.
Funzioni di Libreria per le stringhe DICHIARAZIONI CONTENUTE NEL FILE: char *strcpy( char *dest, const char *sorg ); Copia sorg in dest, incluso il carattere.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
I File.
Il Linguaggio C.
Programmazione di Calcolatori
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Programmazione di Calcolatori
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1.
Programmazione di Calcolatori
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione VIII Il modello di memoria Programmazione di Calcolatori: Il modello di memoria 1.
C. Gaibisso Programmazione di Calcolatori Lezione VIII Il modello di memoria Programmazione di Calcolatori: Il modello di memoria 1.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
Programmazione di Calcolatori
Programmazione di Calcolatori
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione X Ingresso/Uscita di Interi Programmazione di Calcolatori: Ingresso/Uscita 1.
Unità Didattica 3 Linguaggio C
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XVIII Le matrici Programmazione di Calcolatori: le matrici 1.
C. Gaibisso Programmazione di Calcolatori Lezione XIV I vettori Programmazione di Calcolatori: i vettori 1.
Programmazione di Calcolatori
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
Esercizi su File e Liste
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
LdL - LP1 - lez 11 - ver 6 - aa Linguaggi di programmazione I Stringhe (II) Prof. Luigi Di Lascio Lezione 11.
Programmazione in linguaggio C
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Puntatori e Stringhe.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
Stringhe In linguaggio C. Stringhe  Un insieme di caratteri in sequenza forma una stringa.  Alcuni linguaggi definiscono per le stringhe uno specifico.
Stringhe Una stringa è un vettore di char con un carattere costante \0 che indica la fine della stringa il terminatore rende differenti gli array di char.
Puntatori in C Un puntatore è una variabile che contiene un indirizzo di memoria. Quando una variabile contiene l’indirizzo di un’altra variabile, si dice.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Programmazione di Calcolatori Lezione XIX Le stringhe Programmazione di Calcolatori: le stringhe

Premessa: Il tipo char Costanti di 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

La tabella dei codici ASCII Programmazione di Calcolatori: le stringhe

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 x ‘s’ ‘t’ ‘r’ ‘i’ ‘n’ ‘g’ ‘a’ ‘\0’ Programmazione di Calcolatori: le stringhe

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

I/O di stringhe Acquisizione: Modifiche allo stato della memoria: scanf(“%s”, dst); con dst espressione di tipo char * e %s specificatore di formato per le stringhe Modifiche allo stato della memoria: elimina dallo stream di input qualunque sequenza iniziale di caratteri in un insieme di delimitatori (‘\n’, ‘ ‘, ‘\r’, …); copia caratteri dallo stream di input, fino al primo di un insieme di delimitatori (‘\n’, ‘ ‘, ‘\r’, …) escluso, in memoria a partire dall’indirizzo dst; 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

I/O di stringhe Restituzione: Effetto: 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

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)); if (Str1 == NULL) return(0); char *Str2 = (char *) malloc((STR_LENGTH+1)*sizeof(char)); if (Str2 == NULL) free(Str1); }; Continua … Programmazione di Calcolatori: le stringhe

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

I/O di stringhe Compilazione: Esecuzione: Esecuzione: Programmazione di Calcolatori: le stringhe

I/O di stringhe Esecuzione: Programmazione di Calcolatori: le stringhe

Stringhe costanti Stringa costante: Esempio: sequenza di caratteri racchiusa tra doppi apici Esempio: “lkasdj jp656 #@!” “Sono andato a casa” // 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

I/O di stringhe Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

Input di linee di testo da tastiera: fgets() Signature: char * fgets(char *dst, size_t length, FILE *stream) Modifiche allo stato della memoria: 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; 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) Programmazione di Calcolatori: le stringhe

Acquisizione di linee di input // 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); Continua … Programmazione di Calcolatori: le stringhe

Acquisizione di linee di input // libera la memoria allocata per la stringa free(Str); return(1); }; Programmazione di Calcolatori: le stringhe

Acquisizione di una linea di input Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

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

dichiara che la funzione non modificherà il contenuto della stringa La funzione strlen() dichiara che la funzione non modificherà il contenuto della stringa 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 Programmazione di Calcolatori: le stringhe

La funzione strlen() 5 Esempio: int main () { // definisce la stringa char *str = (char *) malloc (...); // definisce la variabile per la lunghezza // della stringa size_t lung; …. // assegna alla variabile la lunghezza lung = strlen(stringa); } char *str ‘p’ ‘r’ ‘o’ ‘v’ ‘a’ ‘\0’ 5 Programmazione di Calcolatori: le stringhe

La funzione strlen() 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); Continua … Programmazione di Calcolatori: le stringhe

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

La funzione strlen() Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strcpy() Signature: Modifiche allo stato della memoria: 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

La funzione strcpy() Esempio: ‘r’ ‘o’ ‘n’ ‘t’ ‘i’ ‘\0’ ‘v’ ‘a’ ‘p’ char *dst; char *src; Esempio: int main () { // definisce la stringa destinazione e // la stringa sorgente char *dst = (char *) malloc (...); char *src = (char *) malloc (...); …. // copia la stringa sorgente sulla // destinazione e visualizza il // risultato dell’operazione printf(“%s”, strcpy(dst, src)); … } ‘a’ ‘\0’ ‘v’ ‘i’ dst Programmazione di Calcolatori: le stringhe

La funzione strcpy() // 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); Continua … Programmazione di Calcolatori: le stringhe

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

La funzione strcpy() Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strncpy() Signature: Modifiche allo stato della memoria: 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

La funzione strncpy() Esempio: ‘o’ ‘r’ ‘t’ ‘a’ ‘\0’ ‘c’ ‘s’ char *dst; char *src; Esempio: int main () { // definisce la stringa destinazione e // la stringa sorgente char *dst = (char *) malloc (...); char *src = (char *) malloc (...); …. // copia due caratteri della stringa // sorgente sulla destinazione e // visualizza il risultato printf(“%s”, strncpy(dst, src, 2)); … } ‘c’ ‘a’ dst Programmazione di Calcolatori: le stringhe

La funzione strncpy() Esempio: ‘r’ ‘o’ ‘n’ ‘t’ ‘i’ ‘\0’ ‘v’ ‘a’ ‘p’ char *dst; char *src; Esempio: int main () { // definisce la stringa destinazione e la stringa // sorgente char *dst = (char *) malloc (...); char *src = (char *) malloc (...); …. // copia quattro caratteri della // stringa sorgente sulla destinazione // e visualizza il risultato printf(“%s”, strncpy(dst, src, 8)); … } ‘a’ ‘v’ ‘i’ ‘\0’ dst Programmazione di Calcolatori: le stringhe

La funzione strncpy() 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); Continua … Programmazione di Calcolatori: le stringhe

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

La funzione strncpy() Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strncpy() Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strcat() Signature: Modifiche allo stato della memoria: 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

La funzione strcat() Esempio: ‘o’ ‘\0’ ‘r’ ‘t’ ‘c’ int main () { char *Dst; char *Src; Esempio: int main () { // definisce la stringa destinazione e la stringa // sorgente char *Src = (char *) malloc (...); char *Dst = (char *) malloc (...); …. // concatena la stringa sorgente // alla destinazione e visualizza // il risultato printf(“%s”, strcat(Src, Dst)); … } ‘r’ ‘t’ ‘o’ ‘\0’ Dst Programmazione di Calcolatori: le stringhe

La funzione strcat() 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); Continua … Programmazione di Calcolatori: le stringhe

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(Dst); return(1); Programmazione di Calcolatori: le stringhe

La funzione strcat() Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strncat() Signature: Modifiche allo stato della memoria: 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

La funzione strncat() Esempio: ‘a’ ‘p’ ‘\0’ ‘o’ ‘c’ ‘t’ int main () { char *Dst; char *Src; Esempio: int main () { // definisce la stringa destinazione e la stringa // sorgente char *Dst = (char *) malloc (...); char *Src = (char *) malloc (...); …. // concatena i primi 2 caratteri della // stringa sorgente alla destinazione // e visualizza il risultato printf(“%s”, strcat(Src, Dst,2)); … } ‘\0’ ‘p’ ‘o’ Dst Programmazione di Calcolatori: le stringhe

La funzione strncat() 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)); Continua … Programmazione di Calcolatori: le stringhe

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(Dst); return(1); Programmazione di Calcolatori: le stringhe

La funzione strncat() Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strncat() Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strcmp() Signature: Modifiche allo stato della memoria: 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

La funzione strcmp() Più informalmente: 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. 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

La funzione strcmp() 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)); Continua … Programmazione di Calcolatori: le stringhe

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); printf("\n%s = %s\n", Str1, Str2); // rilascia la memoria allocata per le stringhe free(Str2); return(1); Programmazione di Calcolatori: le stringhe

La funzione strcmp() Compilazione: Esecuzione: Programmazione di Calcolatori: le stringhe

La funzione strcmp() Esecuzione: Esecuzione: Programmazione di Calcolatori: le stringhe

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