s r t i r n i g n. g h s r t c r p c y s r t c r a c t s r t c r m c p s r t c r h c r s r t s r t s r

Documenti analoghi
char* titolo= Libreria sulle stringhe Esempi: (strcpy) (strstr)... Laboratorio di Informatica L-A 1

string.h strcpy strc strcat strcmp strcmp strchr strstr strstr i t r ; s r \0 int strlen(char* str) char pippo[]={ p, i, p, p, o, \0 \ };

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

STRINGHE: ARRAY DI CARATTERI! a p e \0

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Introduzione al C. Unità 8 Stringhe

Dispensa 13 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratorio

Operazioni sulle stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

1 MANIPOLAZIONE DI STRINGHE ZERO-TERMINATE

C: panoramica. Violetta Lonati

Il linguaggio C. Puntatori e dintorni

Gestione di stringhe. Le stringhe in C/C++

Caratteri e stringhe

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Operazioni elementari sulle stringhe

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Esercizi. Stringhe. Stringhe Ricerca binaria

Lezione 5 Sottoarray di somma massima

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Laboratorio di Algoritmi e Strutture Dati

Programmazione I - Laboratorio

Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Corso di Laurea Ingegneria Elementi di Informatica. Iterazione. C. Limongelli. Iterazione

Il linguaggio C Gestione della memoria

Esercitazione 12. Esercizi di Ricapitolazione

Esercizio 1. Esercizio - 1

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Uso avanzato dei puntatori Allocazione dinamica della memoria

La classe string. Tale classe evita agli utilizzatori tutte le problematiche di allocazione e de-allocazione dei buffer di caratteri

Stringhe. Prof. Lorenzo Porcelli

Lezione 6: Funzioni di I/O avanzate



a.a Codice corso: 21012, 22010

Lezione 8 Struct e qsort

Stringhe. Concetti chiave

Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio:

CARATTERI E STRINGHE Caratteri e stringhe Funzioni della libreria standard I/O Funzioni della libreria di gestione delle stringhe

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

Stringhe e allocazione dinamica della memoria

ESERCIZIO 1. Si considerino le seguenti definizioni:

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Stringhe. Una stringa è una sequenza di caratteri. Esempi: printf( Sum = %d, s); #define ERR_PREFIX ***** Error -

Il linguaggio C. Breve panoramica su stdio.h

Funzioni di libreria. Caratteri e stringhe. Librerie sulle stringhe. Funzioni di libreria. Rappresentazione. Suggerimenti

Caratteri e stringhe

Lezione 6 Selection/Insertion Sort su interi e stringhe

TIPI DI DATO TIPI DI DATO. [ ] (array) struct (strutture) ARRAY (VETTORI) ARRAY (VETTORI)

TIPI DI DATO. I tipi di dato si differenziano in scalari e strutturati. tipi di dato. costruttori predefiniti. definiti dall'utente

Librerie Stringhe. Librerie e stringhe. Lezione 9. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. 2015/2016

Inserimento di un elemento in coda. quale va collegato quello nuovo. ultimo. *lista 8 3. aux. ultimo. *lista 8 3. aux

La programmazione nel linguaggio C

Introduzione al C. Ancora puntatori, allocazione dinamica, e tipi derivati

Caratteri e stringhe. Funzioni di libreria

Esercizi per la preparazione. Alessandra Giordani Lunedì 13 maggio 2013

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

ESERCIZIO 1 ESERCIZIO 2

Esercizi proposti. Caratteri e stringhe. Esercizio Parola palindroma. Esercizi proposti. Palindromia. Analisi. o t t o. m a d a m

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Il linguaggio C. Puntatori e dintorni

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Linguaggio C - Stringhe

Puntatore. I puntatori. Definizione. Assegnazione

Le stringhe. Le stringhe

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

Il tipo char ha dimensione di un byte e contiene il numero di codice ASCII che gli corrisponde.

Suggerimenti, note utili ed errori comuni. Fondamenti di informatica T

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1B di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

5. Quinta esercitazione autoguidata: liste semplici

Allocazione dinamica memoria

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Stringhe e tipi di dati strutturati

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

Stringhe. Stringhe costanti. t[0] t[1] t[2] t[3] t[4] s o l e \0. Esempio. char t[5] = { l, u, n, a, \0 }; definisce l array

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

a.a Codice corso: 21012, 22010

Progetto di FILTRI. FILTRO SIPC (SOLO_I_PRIMI_CARATTERI) #include <stdio.h> #include <string.h>

E12 Esercizi su Strutture dati dinamiche in C

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.

Fondamenti di Informatica T-1

5 Stringhe. Esiste una libreria di C che gestisce le stringhe string.h essa ci permette di:

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Settimana n.9. Obiettivi Stringhe Matrici Vettori di Stringhe

Fondamenti di Informatica 2

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Esercizi di Algoritmi e Strutture Dati

Laboratorio di Informatica

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010.

Esercitazione 6. Array

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

Linguaggi di programmazione + laboratorio a.a. 2012/2013

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

I CARATTERI. Domanda: char c = 1 ; printf( c=%d\n, (int)c ); //cosa stampa?

Transcript:

char* titolo= l, e,, s, t, r, i, n, g, h, e, \0 ; 1 Libreria sulle stringhe La libreria string.h contiene una ricca serie di funzioni per operare sulle stringhe Esempi: copiare una stringa in un altra (strcpy strcpy) concatenare due stringhe (strcat) confrontare due stringhe (strcmp) cercare un carattere in una stringa (strchr) cercare una stringa in un altra (strstr strstr)... 2 1

Lunghezza di una stringa int strlen(char* str); La funzione restituisce la lunghezza della stringa str,, senza contare il terminatore Es: char pippo[]= p, i, p, p, o, \0 ; char pluto[50]= pluto ; sizeof(pippo); 6 strlen(pippo); 5 sizeof(pluto); 50 strlen(pluto); 5 3 Possibile implementazione Idea Scandire la stringa contando i caratteri Terminare il conteggio quando si incontra il terminatore \0 int strlen(char* str) Accumulatore int len = 0; per il conteggio while(str[len]!= \0 ) len++; return len; 4 2

Comparazione fra stringhe int strcmp(char* str1, char* str2); La funzione restituisce un valore <0 se str1 precede lessicograficamente str2 >0 se str1 segue lessicograficamente str2 =0 se str1 e str2 sono identiche Es: char s1[]= pluto ; char s2[]= plutone ; char s3[]= zio paperino ; strcmp(s1,s1); 0 strcmp(s1,s2); <0 strcmp(s3,s2); >0 N.B.: Esiste anche la funzione di libreria strncmp,, che prende in input anche il massimo numero di caratteri che si vogliono confrontare 5 Possibile implementazione 1/3 Idea Scandiamo parallelamente carattere per carattere le due stringhe confrontando di volta in volta i due caratteri trovati Ci fermiamo quando vale una delle seguenti condizioni I caratteri letti sono differenti L ordine lessicografico è determinato dall ordine alfabetico dei due caratteri Una delle due stringhe è giunta al termine (ovvero abbiamo incontrato il suo terminatore) Ciò significa che le due stringhe sono identiche, oppure una è inclusa nell altra 6 3

Possibile implementazione 2/3 idea (continua) Ricordiamoci che per valutare l ordine alfabetico di due caratteri basta compararne i valori numerici (il terminatore vale 0) Quindi basta restituire la differenza tra la coppia di caratteri che si incontra alla fine della scansione Esempio: m a r c o m a r i o \0 \0 c - i i = -6 < 0 7 Possibile implementazione 3/3 int strcmp(char* str1, char* str2) int i=0; while(str1[i]!= \0 && str2[i]!= \0 && str1[i]==str2[i]) i++; return str1[i] - str2[i]; 8 4

Concatenazione di stringhe char* strcat(char* dest, char* src) La funzione appende la stringa src in coda alla stringa dest Ipotesi: la stringa dest ha abbastanza spazio per contenere anche src Viene restituito il puntatore a dest Es: char s1[50] = hello ; char* s2 = world! ; printf( %s,strcat(s1,s2)); hello world! 9 Possibile implementazione 1/2 Idea Ci posizioniamo sul terminatore della stringa dest Idea È l elemento di posizione strlen(dest) A partire da questo punto, copiamo il contenuto della seconda stringa carattere per carattere, fino a quando non raggiungiamo il suo terminatore Infine, appendiamo un nuovo terminatore alla stringa dest \0 dest h e l offset l o \0 src w o r l d \0 10 5

Possibile implementazione 2/2 char* strcat(char* dest,char* src) int i; int offset = strlen(dest); for(i = 0; i <= strlen(src); i++) dest[offset+i] = src[i]; //dest[offset+i] = \0 ; return dest; 11 Altra implementazione 1/2 Possiamo ricorrere all uso della funzione per copiare una stringa in un altra char* strcpy(char* dest, char* src) Copia la stringa src in dest e restituisce dest Poiché vogliamo copiare src IN FONDO a dest, dobbiamo spostare il puntatore di destinazione sul terminatore di dest dest h e l l o \0 src strcpy w o r l d \0 12 6

Altra implementazione 2/2 Dobbiamo ricordarci che non possiamo semplicemente restituire il valore di strcpy È il puntatore alla posizione in cui abbiamo copiato src char* strcat(char* dest, char* src) strcpy(dest + strlen(dest), src); return dest; 13 Ricerca di un carattere in una stringa char* strchr(char* str, int car); La funzione ricerca il carattere car all interno della stringa str (compreso il terminatore) e restituisce La posizione della prima occorrenza del carattere nella stringa NULL se il carattere non viene trovato Es: char* find = strchr( hello world!, w ); Es: printf( %s,find); world! 14 7

Possibile implementazione 1/2 Idea Scandisco la stringa con un puntatore, finchè non raggiungo il terminatore Se il carattere alla posizione corrente è uguale a car,, restituisco il puntatore corrente Se invece termino il ciclo di scansione senza successo, restituisco NULL 15 Possibile implementazione 2/2 char* strchr(char* str, int car) do if(*str == car) return str; while (*str++); return NULL; Dereferenziazione del puntatore Prima viene testato se il valore attualmente puntato da str non è nullo (ovvero non corrisponde al terminatore), poi il puntatore viene incrementato per continuare la scansione 16 8

Ricerca di una stringa in un altra stringa char* strstr(char* str, char* sub); La funzione ricerca la stringa sub all interno della stringa str, restituendo L intera stringa str se sub è la stringa vuota La posizione dell inizio della prima occorrenza della sottostringa sub in str NULL se la sottostringa non è presente all interno di str Es: char* result=strstr( Say bye bye!, bye ); printf( %s,result); bye bye! 17 Possibile implementazione 1/2 Idea Individuo la prima occorrenza dell iniziale di sub all interno di str Posso usare strchr Controllo se la parte di str che rimane ha come prefisso sub Posso usare strncmp,, utilizzando come numero di caratteri da confrontare la lunghezza di sub In caso affermativo, restituisco questa parte di str Altrimenti, proseguo ricercando la successiva occorrenza dell iniziale di sub 18 9

Possibile implementazione 2/2 char* strstr(char *str, char* sub) Cerca il carattere int sublength=strlen(sub); char* p=str; sia nullo for(; (p=strchr(p,sub[0]))!=null; p++) if(strncmp(p,sub,sublength)==0) //sub prefisso di p! return p; strchr sub[0] return NULL; successiva Cerca il carattere sub[0] in p,, riassegna il risultato a p, poi testa che il valore non Necessario perché altrimenti strchr continua a trovare sempre la stessa occorrenza di sub[0],, senza spostarsi sulla 19 La soluzione dell autarchico......e della CRT char* strstr (const char *str1, const char *str2) char *cp = (char*) str1; char *s1, *s2; if (!*str2) return((char*)str1); while (*cp) s1 = cp; s2 = (char*) str2; while (*s1 && *s2 &&!(*s1 - *s2)) s1++, s2++; if (!*s2) cp++; return(null); return(cp); 20 10