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

Documenti analoghi
STRINGHE: ARRAY DI CARATTERI! a p e \0

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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 \ };

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

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

Introduzione al C. Unità 8 Stringhe

Caratteri e stringhe

Stringhe. Concetti chiave

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

C: panoramica. Violetta Lonati

Esercizi. Stringhe. Stringhe Ricerca binaria

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

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

Il linguaggio C Gestione della memoria

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

Stringhe e allocazione dinamica della memoria

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

Stringhe. Prof. Lorenzo Porcelli

Stringhe e tipi di dati strutturati

Librerie C. Corso di Linguaggi e Traduttori 1 AA

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

Programmazione I - Laboratorio

Il linguaggio C. Puntatori e dintorni

Lezione 5 Sottoarray di somma massima

Gestione delle stringhe in C

1 MANIPOLAZIONE DI STRINGHE ZERO-TERMINATE

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

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

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

a.a Codice corso: 21012, 22010

Linguaggio C: Stringhe di caratteri e File

Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche

File binari e file di testo

Il linguaggio C. Breve panoramica su stdio.h

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

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

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Lezione 6: Funzioni di I/O avanzate

Il linguaggio C Puntatori

Laboratorio di Algoritmi e Strutture Dati

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

I files in C. A cura del prof. Ghezzi

I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd

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

ESERCIZIO 1 ESERCIZIO 2

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

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa.

ESERCIZI LEZIONE 7 STRINGHE ED ALLOCAZIONE DINAMICA DELLA MEMORIA

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

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

Uso avanzato dei puntatori Allocazione dinamica della memoria

Esercizio 1 (15 punti)

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

ESERCIZIO 1. Si considerino le seguenti definizioni:

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Alcuni Richiami sul C

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

stringhe array monodimensionali char. libreria < string.h>

Informatica 2 modulo C Massimo Callisto De Donato

Caratteri e stringhe

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

Laboratorio di Algoritmi e Strutture Dati

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

Vettori di caratteri. Caratteri e stringhe. Stringhe in C. Vettori di caratteri. char saluto[10] ; B u o n g i o r n o 4. Esempio.

Caratteri e stringhe. Vettori di caratteri. Il tipo stringa Terminatore nullo Input/output di stringhe Politecnico di Torino 1



I CARATTERI E LE STRINGHE

Fondamenti di Informatica T-1

4 GLI ARRAY E LE STRINGHE

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Stringhe di caratteri

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

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

Caratteri e stringhe

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Anche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto:

Esercizi. La funzione swapint() primo tentativo

Esercizio 1: calcolo insieme intersezione

ESERCIZIO: Lettura/Scrittura Array

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

Esercitazione 12. Esercizi di Ricapitolazione

Strutture Dati Dinamiche

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

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

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

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

Tutorato Programmazione 1 Modulo 2

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Esercizio 1. Esercizio - 1

Introduzione al C. Stream e disk file

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

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

Le stringhe. Le stringhe

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

Transcript:

STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1 caratteri, perché una cella è destinata al terminatore '\0'. STRINGHE: ARRAY DI CARATTERI Un array di N caratteri può ben essere usato per memorizzare stringhe più corte s d i \0 0 1 2 3 In questo caso, le celle oltre la k-esima (k essendo la lunghezza della stringa) sono concettualmente vuote: praticamente sono inutilizzate e contengono un valore casuale.

STRINGHE Una stringa si può inizializzare, come ogni altro array, elencando le singole componenti: char s[4] = {'a', 'p', 'e', '\0'}; oppure anche, più brevemente, conlaforma compatta seguente: char s[4] = "ape" ; Il carattere di terminazione \0 è automaticamente incluso in fondo. Attenzione alla lunghezza! STRINGHE: LETTURA E SCRITTURA Una stringa si può leggere da tastiera e stampare, come ogni altro array, elencando le singole componenti:...char str[4]; int i; for (i=0; i < 3; i++) scanf( %c, &str[i]); str[3] = \0... oppure anche, più brevemente, con la forma compatta seguente:...char str[4]; scanf( %s, str); NOTA: E un eccezione!!! Gli array non si possono leggere e scrivere interamente, ma elemento per elemento.

STRINGHE: LETTURA E SCRITTURA Si noti che usando la scanf scanf( %s, str); La stringa viene considerata terminata anche dalle spazio bianco. Quindi se vogliamo scrivere come stringa Michela Milano non possiamo usare la scanf cosi com è ma cambiando la stringa di formato come segue: scanf( %[^\n], str); Altrimenti possiamo usare la gets LETTURA E SCRITTURA DI STRINGHE char *gets(char *s); La funzione gets() legge una linea dallo stdin fino al carattere di newline '\n' o di EOF. Questi caratteri sono sostituiti con '\0'. Non viene eseguito nessun controllo sulla dimensione di s, pertanto se la linea da leggere supera la dimensione di s si ha un buffer overrun. La funzione gets() ritorna s in caso di successo e NULL quando una fine file viene incontrata t senza che nessun carattere sia stato t letto. int puts(const char *s); La funzione puts() scrive la stringa s sullo stdout aggiungendo il carattere di new-line '\n'. Restituisce un numero non-negativo in caso di successo e EOF in caso di errore.

ESEMPIO Problema: Date due stringhe di caratteri, decidere quale precede l altra in ordine alfabetico. Rappresentazione dell informazione: poiché vi possono essere tre risultati (s1<s2, s1==s2, s2<s1), un boolean non basta possiamo usare: due boolean (uguale e precede) tre boolean (uguale, s1precedes2, s2precedes1) un intero (negativo, zero, positivo) scegliamo la terza via. ESEMPIO Specifica: scandire uno a uno gli elementi di egual posizione delle due stringhe, o fino alla fine delle stringhe, o fino a che se ne trovano due diversi nel primo caso, le stringhe sono uguali nel secondo, sono diverse nel secondo caso, confrontare i due caratteri così trovati, e determinare qual è il minore la stringa a cui appartiene tale carattere precede l altra

Codifica: ESEMPIO int main() { char s1[] = Maria"; char s2[] = Marta"; int i=0, stato; while(s1[i]!='\0' && s2[i]!='\0' && s1[i]==s2[i]) i++; stato = s1[i]-s2[i]; negativo s1 precede s2 return 0; positivo s2 precede s1 } zero s1 è uguale a s2 ESEMPIO Problema: Data una stringa di caratteri, copiarla in un altro array di caratteri (di lunghezza non inferiore). Ipotesi: La stringa è ben formata, ossia correttamente terminata dal carattere \0. Specifica: scandire la stringa elemento per elemento, fino a trovare il terminatore \0 (che esiste certamente) nel fare ciò, copiare l elemento nella posizione corrispondente dell altro array.

ESEMPIO Codifica:copia della stringa carattere per carattere int main() { char s[] = "Nel mezzo del cammin di"; char s2[40]; La dimensione i deve essere tale da garantire che la stringa non ecceda int i=0; for (i=0; s[i]!='\0'; i++) s2[i] = s[i]; s2[i] = '\0'; return 0; } Al termine, occorre garantire che anche la nuova stringa sia ben formata, inserendo esplicitamente il terminatore. ESEMPIO Perché non fare così? int main() { char s[] = "Nel mezzo del cammin di"; char s2[40]; s2 = s; } ERRORE DI COMPILAZIONE: incompatible types in assignment!! PERCHÉ GLI ARRAY NON POSSONO ESSERE MANIPOLATI NELLA LORO INTEREZZA!

ESEMPIO Problema: Data una stringa di caratteri, scrivere una funzione che ne calcoli la lunghezza. Nel caso delle stringhe, la dimensione non serve perché può essere dedotta dalla posizione dello \0 Codifica: int lunghezza(char s[]) { int lung=0; for (lung=0; s[lung]!='\0'; lung++); return lung; } LIBRERIA SULLE STRINGHE Il C fornisce una nutrita libreria di funzioni per operare sulle stringhe: Include funzioni per: #include < string.h > confrontare due stringhe (strcmp) copiare una stringa in un altra (strcpy) calcolare la lunghezza di una stringa (strlen) concatenare due stringhe (strcat) cercare un carattere in una stringa (strchr)...

LIBRERIA SULLE STRINGHE int strcmp(const char *s1, const char *s2); La funzione strcmp() effettua il confronto fra le due stringhe s1 e s2. restituisce un intero minore, uguale o maggiore di 0 a seconda che s1 sia rispettivamente minore, uguale o maggiore di s2. char *strcpy(char *dest, const char *src); La funzione strcpy() copia la stringa src sull'area puntata da dest la quale deve essere sufficientemente ampia ad accogliere tutti i caratteri di src compreso il terminatore '\0'. Le aree src e dest non si devono sovrapporre. Restituisce un puntatore alla stringa di destinazione dest. LIBRERIA SULLE STRINGHE int strlen(const char *s); La funzione strlen() calcola la lunghezza della stringa s, (inteso come il numero di caratteri dell'array puntato da s) escluso il terminatore '\0'. La funzione strlen() ritorna il numero di caratteri in s.

LIBRERIA SULLE STRINGHE char *strcat(char *dest, const char *src); La funzione strcat() concatena la stringa src aggiungendola al termine della stringa dest. La concatenazione avviene copiando la stringa src a partire dal terminatore della stringa desc. La copia di src e' comprensiva del suo terminatore. L'area di memoria puntata da dest deve essere sufficientemente ampia da accogliere entrambe le stringhe ed il terminatore '\0', quindi dest deve essere dimensionata almeno per contenere strlen(dest)+strlen(src)+1 caratteri. Le funzioni strcat() ritornano il puntatore alla stringa dest risultante. LIBRERIA SULLE STRINGHE char *strchr(const char *s, int c); La funzione individua la prima occorrenza di c (convertito ad un carattere) nella stringa s. Il valore di ritorno e il puntatore alla prima occorrenza di c o un puntatore nullo se c non e stato trovato.

ESEMPIO FUNZIONI DI LIBRERIA #include <stdio.h> #include <string.h> int main() {char s1[10]; char s2[20]; char *s3; int l1,l2,l3; printf("inserisci due stringhe \n"); scanf("%s", s1); scanf("%s", s2); l1= strlen(s1); l2= strlen(s2); ESEMPIO FUNZIONI DI LIBRERIA } printf("lunghezza della prima stringa : %d \n",l1); printf("lunghezza della seconda stringa : %d \n",l2); s3=strcat(s1,s2); printf("terza stringa %s\n", s3); l3 = strcmp(s1,s2); if (l3 < 0) printf("%s prima di %s", s1,s2); else if (l3 == 0) printf("stringhe uguali"); else printf("%s dopo di %s", s1,s2); return 0;

LETTURA E SCRITTURA SU STRINGA In C c e la possibilità di leggere e scrivere direttamente da e su stringa int sprintf(char *str, const char *format,...); La funzione sprintf() è analoga alla funzione printf() ma nella prima i caratteri vengono scritti nell'area puntata da str. Naturalmente str deve essere ampia a sufficienza per contenere i caratteri in output più il terminatore '\0'. int sscanf(const char *str, const char *format,...); La funzione sscanf() ha lo stesso comportamento della funzione scanf(), ma l'input avviene da str.