char* titolo= { l, e,, s, t, r, i, n, g, h, e, \0 };

Documenti analoghi
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

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

Linguaggio C: Stringhe Valeria Cardellini

RIPRENDIAMO I PUNTATORI

STRINGHE: ARRAY DI CARATTERI STRINGHE: ARRAY DI CARATTERI. a p e \0

Linguaggio C - Stringhe

Introduzione al C. Unità 8 Stringhe. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi

Puntatori e array. Violetta Lonati

Introduzione al C. Unità 8 Stringhe

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

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso

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

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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

Introduzione al C. Unità 8 Stringhe. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

Esercitazione di Reti degli elaboratori

Lezione XI Le stringhe

Il linguaggio C. Puntatori e dintorni

Tipi strutturati in C. Stringhe

Le stringhe. Le stringhe sono sequenze di caratteri,

Esercitazioni di Programmazione II. Chiara Petrioli

Caratteri e stringhe

Le stringhe. Le stringhe sono sequenze di caratteri,

C: panoramica. Violetta Lonati

ELEMENTI DI INFORMATICA. Linguaggio C

Corso di Laboratorio di Sistemi Operativi A.A

Lab 09 Strutture e programmi su più file

Tipi di dato STRUTTURATI

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

Lezione 5 Sottoarray di somma massima

1 MANIPOLAZIONE DI STRINGHE ZERO-TERMINATE

Operazioni elementari sulle stringhe

Caratteri e stringhe

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

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

Lezione 3 Sottoarray di somma massima

Lezione 3 Sottoarray di somma massima

Lezione 8: Stringhe ed array multidimensionali

Laboratorio di Algoritmi e Strutture Dati

Introduzione al linguaggio C Puntatori

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

(Def. funzioni con parametri di tipo matrice)

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

Programmazione I - Laboratorio

Esercizi. Stringhe. Stringhe Ricerca binaria

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Stringhe. Unità 8. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Esercizio 1. Esercizio - 1

Stringhe. Unità 8. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Sono variabili il cui valore corrisponde ad un indirizzo di memoria. Puntatori

Il linguaggio C Gestione della memoria

Esempio: Mergesort. void mergesort(int *a, int *b, int l, int r) { int i,j,k,m;

Lab 13 Strutture e programmi su più file

Esercitazione 12. Esercizi di Ricapitolazione

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 18. Iterazione. Maggio Iterazione

Esercizio 1. Esercizio - 1

Stringhe in C. Emilio Di Giacomo

Lab 13 Strutture e programmi su più file "

A. Ferrari. stringhe di caratteri In linguaggio C

Capitolo 16 Iterazione

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

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

Lab 9 Strutture e programmi su più file

a.a Codice corso: 21012, 22010

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E06. C. Limongelli Dicembre 2011

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

Elementi di Informatica



Lezione 6: Funzioni di I/O avanzate

Uso avanzato dei puntatori Allocazione dinamica della memoria

Stringhe. Concetti chiave

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

I puntatori e l allocazione dinamica di memoria. Esercizi risolti

ESERCIZIO 1. Si considerino le seguenti definizioni:

Stringhe e allocazione dinamica della memoria

Lezione 8 Struct e qsort

Lezione 10 Liste. Rossano Venturini. Pagina web del corso.

Lezione 8 Liste. Rossano Venturini. Pagina web del corso.

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

Stringhe. Prof. Lorenzo Porcelli


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

Lezione 6 Struct e qsort

Corso di Fondamenti di Informatica Tipi strutturati: Stringhe

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 -

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

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

Transcript:

char* titolo= { l, e,, s, t, r, i, n, g, h, e, \0 }; 1

Libreria sulle stringhe libreria string.h contiene una ricca serie di funzioni per operare sulle stringhe Esempi: copiare una stringa in un altra (strcpy) concatenare due stringhe (strcat) confrontare due stringhe (strcmp) cercare un carattere in una stringa (strchr) cercare una stringa in un altra (strstr)... 2

Lunghezza di una stringa int strlen(char* str); La funzione restituisce la lunghezza della stringa str, senza contare il terminatore Esempio: 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) { int len = 0; while(str[len]!= \0 ) len++; return len; } Accumulatore per il conteggio 4

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 Esempio: 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 libreriastrncmp, che prende in input anche il massimo numero di caratteri che si vogliono confrontare 5

Possibile implementazione 1/3 Idea Scandiamo carattere per carattere le due stringhe confrontando di volta in volta i due caratteri trovati Ci fermiamo quando vale una delle seguenti condizioni caratteri letti sono differenti ordine lessicografico è determinato dall ordine alfabetico dei due caratteri una delle due stringhe è giunta al termine (ovvero abbiamo incontrato il suo terminatore) ovvero le due stringhe sono identiche, oppure una è inclusa nell altra 6

Possibile implementazione 2/3 idea (continua) Ricordiamoci che per valutare l ordine alfabetico di due caratteri basta compararne i valori numerici (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 = -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

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 Esempio: 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 È 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 offset dest h e l l o \0 src w o r l d \0 10

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; } Perché si può commentare l istruzione? 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

Altra implementazione 2/2 Dobbiamo ricordarci che ciò che deve essere restituito è il puntatore all intera stringa concatenata, ovvero il puntatore al primo carattere di dest 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 Esempio: char* find = strchr( hello world!, w ); printf( %s,find); world! 14

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

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 Esempio: 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

Possibile implementazione 2/2 char* strstr(char *str, char* sub) { int sublength=strlen(sub); char* p=str; } for(; (p=strchr(p,sub[0]))!=null; p++) { if(strncmp(p,sub,sublength)==0) //sub prefisso di p! return p; } return NULL; Cerca il carattere sub[0] in p, riassegna il risultato a p, poi testa che il valore non sia nullo Necessario perché altrimenti strchr continua a trovare sempre la stessa occorrenza di sub[0], senza spostarsi sulla successiva 19