Linguaggio C: Stringhe di caratteri e File

Documenti analoghi
LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

Caratteri e stringhe

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

Corso sul linguaggio C Modulo Tipi di dato

STRINGHE: ARRAY DI CARATTERI! a p e \0

Gestione dei file. Linguaggio ANSI C Input/Output - 13

Introduzione. L elaborazione dei files in C. Elaborazione dei files (1) Elaborazione dei files (2) D.D. cap. 11+ pp K.P. pp.

Gestione dei File. dischi nastri cd

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

Linguaggio C: i file

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

Caratteri e stringhe

18/01/16. Soluzione degli esercizi svolti in aula alla lavagna. Seconda lezione. Cast

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

Gestione di files Motivazioni

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Puntatori. Fondamenti di Programmazione

Introduzione al C. Unità 9 File. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

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

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

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

puntatori Lab. Calc. AA 2007/08 1

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

Struttura dei programmi C

Esercizi. I File ed il C

Fondamenti di Informatica T. Linguaggio C: File

Lettura da tastiera e scrittura su monitor

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Esercitazione 6. Array

Linguaggio C La libreria standard

Gestione dei File C. Generalità

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

Capitolo 11 Elaborazione di file

Introduzione al C. Stream e disk file

Esercizi di programmazione in linguaggio C English Dictionary

stringhe array monodimensionali char. libreria < string.h>

Esercitazione 3. Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf

Laboratorio di Algoritmi e Strutture Dati

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

Fondamenti di Informatica

LP1 Lezione 13: i File in C. Maurizio Tucci

Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

Scrittura formattata - printf

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

Caratteri e stringhe. Funzioni di libreria

Input/Output di numeri

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

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti

Linguaggio C Gestione File

TUTORATO di LINGUAGGI I

Programmazione I - Laboratorio

Introduzione al C. Unità 8 Stringhe

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Le funzioni, e le istruzioni di input/output

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

Variabili e Istruzioni

I file. un file è una sorgente/destinazione di dati per diversi attori

Introduzione al Linguaggio C

Caratteri e stringhe

Input/output in C e in C++

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

Corso di Informatica 1 Esercitazione n. 4

4 GLI ARRAY E LE STRINGHE

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

IL PRIMO PROGRAMMA IN C

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

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

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

FILE BINARI FILE BINARI

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

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

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.

Informatica 1. Prova di recupero 21 Settembre 2001

Soluzione/* PROGRAMMAZIONE IN C */ #include <stdio.h> #include <stdlib.h>

Gestione dei File in C

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

I/O INTERATTIVO. scanf: quello che è indispensabile sapere printf: quello che è utile sapere

Esercitazione 12. Esercizi di Ricapitolazione

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Stringhe e allocazione dinamica della memoria

Il linguaggio C. Notate che...

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

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

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

Esercizio 1 Liste: calcolo perimetro di un poligono

Rappresentazione binaria delle variabili (int e char)

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

FILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto

Corso di Fondamenti di Programmazione canale E-O. Tipi di dato. Un esempio

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Esercizio 1: Puntatori impiegati che sono manager

sizeof(a) fornisce la dimensione in byte dell oggetto A o del tipo A. sizeof ha la stessa priorità degli altri operatori unari.

Introduzione al linguaggio C

FILE BINARI FILE BINARI FILE BINARI. OUTPUT BINARIO: fwrite()

GESTIONE DEI FILE IL CONCETTO DI FILE APERTURA E CHIUSURA DI UN FILE OPERARE SUI FILE

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

GESTIONE DEI FILE persistenza archiviare file astrazione fornita dal sistema operativo dimensione potenzialmente illimitata ad accesso sequenziale

Transcript:

Linguaggio C: Stringhe di caratteri e File

ESEMPIO: Lettura da tastiera e stampa a video di una sequenza di caratteri #include <stdio.h< stdio.h> main() int c; printf("inserisci dei caratteri"); printf("( ("(CTRL+D per finire)"); while ((c=getchar getchar())!= EOF) putchar(c);

ESEMPIO: Visualizzazione dei caratteri ASCII #include <stdio.h< stdio.h> main() char c=' '; while (c <= '') putchar(c); c++;

I/O DI CARATTERI: getchar e putchar Le funzioni getchar e putchar,, definite nell'header file stdio.h, servono per l'input e l'output di caratteri int getchar() restituisce un intero corrispondente al codice del tasto della tastiera premuto (o il valore predefinito EOF in caso di segnalazione di fine file) int putchar(char c) invia al video il carattere c e restituisce il corrispondente codice del tasto della tastiera se l'operazione di output ha avuto successo Da tastiera il valore predefinito EOF può essere inserito con CTRL+D o con CTRL+Z,, a seconda del calcolatore

ESEMPIO: Lettura da tastiera e visualizzazione del testo trasformato in maiuscolo #include <stdio.h< stdio.h> #include <ctype.h< ctype.h> main() int ci, co; printf("inserisci dei caratteri"); printf("( ("(CTRL+D per finire)"); while ((ci ci=getchar())!= EOF) if (isalpha(ci) && islower(ci)) co=toupper(ci); else co=ci; putchar(co co);

MANIPOLAZIONE DI CARATTERI Funzioni definite nell'header file ctype.h per operare sui caratteri prescindendo dalla loro codifica (fatta salva la consecutività dei caratteri numerici '0', '1', e dei caratteri minuscoli e maiuscoli 'a', 'b',, 'A', 'B', ): isalpha verifica se l'argomento è una lettera dell'alfabeto isdigit " " " è una cifra islower " " " è una lettera minuscola isupper " " " è una lettera maiuscola ispunct " " " è un carattere di punteggiatura isspace " " " è un carattere di separazione tolower restituisce la lettera minuscola equivalente al carattere maiuscolo passato come argomento toupper restituisce la lettera maiuscola equivalente al carattere minuscolo passato come argomento Sono tutte funzioni di tipo intero (simulazione del tipo logico), con argomento di tipo carattere

STRINGHE Una variabile di tipo char può contenere un solo carattere; per trattare sequenze di caratteri il linguaggio C introduce le stringhe,, intese come array di caratteri in cui è specificato il carattere di terminazione della stringa ('\0'). DICHIARAZIONE E ASSEGNAZIONE DI UNA STRINGA: char giorno[7]="sabato"; 's' 'a' 'b' 'a' 't' 'o' '\0' N.B.: char c='a'; indica un unico carattere memorizzato in un'unica locazione di memoria char c[2]="a"; indica una stringa,, memorizzata in due locazioni di memoria consecutive contenenti i caratteri 'a' e '\0'

LETTURA DI UNA STRINGA: char giorno[100]; scanf(" ("%s",giorno); N.B. giorno è un array,, per cui il secondo argomento passato alla scanf (giorno) è l'indirizzo del primo elemento dell'array giorno (&giorno[0]) In giorno verrà memorizzata una sequenza di caratteri immessi in input racchiusa fra caratteri di separazione (spazio, tabulazione, andata a capo, ) una stringa non può contenere degli spazi l'array che deve contenere la stringa deve essere opportunamente dimensionato

ESEMPIO: Calcolo della lunghezza di una stringa (n. di caratteri escluso '\0')' #include <stdio.h< stdio.h> #define MAXL 100 int lungh_string(char stringa[]); main() char str1[maxl]; printf("inserisci una stringa\n"); scanf("%s",str1); printf("lunghezza stringa = %d", lungh_string(str1)); int lungh_string(char stringa[]) int indice=0; while (stringa[indice]) indice++; return(indice);

ESEMPIO: : Copia di una stringa in un'altra #include <stdio.h< stdio.h> #define MAXL 100 int lungh_string(char s[]); void copy_string(char s1[], char s2[]); main() char str1[maxl], str2[maxl]; printf("inserisci una stringa"); scanf("%s",str1); copy_string(str1,str2); printf("stringa copiata:%s\n",str2); void copy_string(char s1[], char s2[]) int i; for (i=0; i<=lungh_string(s1); i++) s2[i]=s1[i];

ESEMPIO: : Ricerca di una stringa in un'altra #include <stdio.h< stdio.h> #define MAXL 100 int lungh_string(char s[]); int search_str(char s1[], char s2[]) int trovato=0, l1, l2, i, j; l1=lungh_string(s1); l2=lungh_string(s2); if (l1>=l2) i=0; while((!trovato) && (i<=l1-l2)) l2)) trovato=1; for (j=0;j<l2;j++) if (s2[j]!= s1[i+j]) trovato=0; i++; return(trovato);

ESEMPIO: : Ricerca di una stringa in un'altra (cont.) main() char str1[maxl], str2[maxl]; int trovato; printf("inserisci una stringa"); scanf("%s",str1); printf("inserisci una chiave"); scanf("%s",str2); trovato=search_str(str1,str2); if (trovato) printf("chiave trovata\n"); else printf("chiave non trovata\n");

MANIPOLAZIONE DI STRINGHE Il linguaggio C standard prevede varie funzioni per la manipolazione di stringhe, contenute nell'header file string.h strlen(s) restituisce la lunghezza della stringa s strcpy(s1,s2) copia s2 in s1 strcmp(s1,s2) confronta le due stringhe e restituisce un intero negativo se s1 < s2, zero se s1 = s2, un intero positivo se s1 > s2 strcat(s1,s2) concatena s1 con s2, copiando i caratteri che costituiscono s2 in coda a quelli di s1, e restituendo un puntatore a s1 strstr(s1,s2) ricerca la stringa s2 nella stringa s1, restituendo un puntatore al punto di s1 dove inizia s2 (oppure NULL se s2 non è presente) atof(s) converte la stringa s in un numero reale a doppia precisione, restituendo il risultato in un double atoi(s) converte la stringa s in un numero intero

#include <stdio.h< stdio.h> main() FILE *fp* fp; int i; ESEMPIO: Stampa di dati su un file testo if ((fp fp=fopen("file.dat","w")) ")) == NULL) printf("errore apertura file.dat.dat\n"); else for (i=1; i<=10; i++) fprintf(fp,, "%d\n",i n",i); fclose(fp);

ESEMPIO: Lettura di dati da un file testo #include <stdio.h< stdio.h> main() FILE *fp; int i, stato; if ((fp fp=fopen("file.dat","r")) ")) == NULL) printf("errore apertura file.dat.dat\n"); else for (stato( stato=fscanf(fp,, "%d", &i); stato!= EOF; stato=fscanf(fp fp,, "%d" %d", &i)) printf("%d ("%d\n",i); fclose(fp fp);

I FILE Un file testo è una sequenza di componenti tutti dello stesso tipo caratterizzata dall'accesso sequenziale. Per operare su un file testo, questo deve essere "aperto": fp=fopen =fopen("nome_file","tipo_apertura"); con: fp puntatore a file: FILE *fp; "nome_file" stringa contenente il nome del file, incluso il percorso nel file system "tipo_apertura" stringa che specifica il tipo di operazioni da compiere sul file ("r"=solo lettura; "w"=scrittura" =scrittura; ; "a"=appendi" =appendi; "r+ r+"=lettura e scrittura ) Una volta terminato di operare su un file, questo deve essere "chiuso": fclose(puntatore_a_file);

Il C standard prevede alcuni file testo standard: stdin = standard input (tastiera) stdout = standard output (video) stderr = standard error (video) Questi sono sempre predisposti, per cui non devono essere nén aperti nén chiusi Per la lettura e la scrittura su file testo sono disponibili funzioni analoghe a quelle per i file testo standard: fscanf(puntatore_a_file," (puntatore_a_file,"%d",&intero); fprintf(puntatore_a_file," (puntatore_a_file,"%d",intero); carattere=getc getc(puntatore_a_file); putc(carattere (carattere, puntatore_a_file);

I file considerati sinora sono detti file testo: le informazioni contenute nel file, rappresentate in binario nel calcolatore, vengono convertite nel formato del loro tipo di dato e così memorizzate Nei file binari,, invece, le informazioni contenute nel file sono memorizzate direttamente in binario. File testo vs. file binari: i file testo possono essere facilmente manipolati mediante un qualsiasi text editor i file testo sono trasportabili i file binari occupano meno spazio i file binari sono più veloci da leggere e a scrivere

ESEMPIO: Stampa di dati su un file binario #include <stdio.h< stdio.h> main() FILE *fp* fp; int i; if ((fp fp=fopen("file.dat","wb")) ")) == NULL) printf("errore apertura file.dat.dat\n"); else for (i=1; i<=10; i++) fwrite(&i, sizeof(int), 1, fp); fclose(fp fp);

ESEMPIO: Lettura di dati da un file binario #include <stdio.h< stdio.h> main() FILE *fp; int i, stato; if ((fp fp=fopen("file.dat","rb")) ")) == NULL) printf("errore apertura file.dat.dat\n"); else for (stato( stato=fread(&i, sizeof(int), 1, fp); stato!= EOF; stato=fread(&i &i, sizeof(int int), 1, fp)) printf("%d ("%d\n",i); fclose(fp fp);

Per operare su un file binario, questo deve essere "aperto" in modo m binario: fp=fopen(" ("nome_file","tipo_apertura"); con "tipo_apertura": "rb"" = solo lettura "wb"" = scrittura "ab"" = appendi Per la lettura e la scrittura su file binario sono disponibili le funzioni: fread(ind_dati ind_dati, sizeof(dati), num_dati,, puntatore_a_file); fwrite(ind_dati ind_dati, sizeof(dati), num_dati, puntatore_a_file);

F I N E