La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.

Presentazioni simili


Presentazione sul tema: "Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria."— Transcript della presentazione:

1 Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria Informatica, Gestionale e dellAutomazione

2 Lezione 9 Input/output e stream

3 Caratteri I caratteri vengono rappresentati come valori numerici Una tabella di codifica permette di associare valori numerici a caratteri ASCII (7bit) ISO caratteri sono appena sufficienti per le lingue europee Unicode (31bit) Transcodifica UTF-8 Transcodifica UTF-16

4 Libreria standard: string La classe string della libreria standard rappresenta sequenze di caratteri di lunghezza arbitraria typedef basic_string string; string s; Costruttore di default, stringa vuota string s(buongiorno) Inizializza la stringa con una stringa costante Una stringa costante è una stringa stile C, non un oggetto della classe string Array di const char

5 Dichiarazione di string nella libreria standard template class allocator; template struct char_traits; template, typename _Alloc = allocator > class basic_string; template<> struct char_traits ; typedef basic_string string; template<> struct char_traits ; typedef basic_string wstring;

6 basic_string template class basic_string _CharT è il tipo del carattere char wchar_t (come char ma occupa due o più byte) _Traits è un char_traits, specializzazione del template template struct char_traits Definisce le operazioni elementari tra caratteri: assegnamenti, conversioni, confronti, copie, spostamenti, … Nella libreria standard sono già definite le specializzazioni per char e wchar_t _Alloc è un allocatore

7 Membri di string string s; // … s.empty() true se s è vuota s.size() Dimensione (numero di caratteri) Restituisce un size_type (unsigned) operator[] Il carattere in una data posizione (partendo da 0) Non viene controllata la validità dellindice Largomento è un size_type Restituisce un Lvalue operator+ Concatenazione tra stringhe operator= Copia carattere per carattere operator== != >= Operatori di confronto

8 Membri di string Ricerca di sottostringhe find rfind Ricerca di un carattere find_first_of find_last_of find_first_not_of find_last_not_of Sostituzione replace Sottostringa substr

9 Stringhe stile C Il C++ eredita dal C la nozione di stringa come array di char, in cui lultimo carattere è null char s[] = {C, i, a, o, \0}; char *s = Ciao; Il null è aggiunto in automatico while(*s) { // fai qualcosa con *s s++; } Per un oggetto string è definito il metodo c_str() che restituisce la stringa stile C corrispondente

10 Input di stringhe string s; cin >> s; Legge e scarta spazi bianchi iniziali Legge tutti i caratteri fino al successivo spazio bianco string s; getline(cin, s) Legge una riga intera, fino al newline (che viene scartato)

11 Input/output #include definisce oggetti usati per linput/output usando la console, basati su flussi (stream) istream (input stream), flusso di input Linput da un istream si effettua con loperatore >> cin, istream che funge da input standard Funzione getline, legge una string da un istream ostream (output stream), flusso di output Loutput su un ostream si effettua con loperatore << cout, ostream che funge da standard output cerr, ostream destinato alloutput dei messaggi di errore iostream legge e scrive su un flusso Deriva da istream e ostream

12 IO di caratteri get(c) mette un char in c putback(char) rimette nel flusso put(char) scrive un char get() restituisce il prossimo byte (come int) unget torna indietro di un byte peek() spia il prossimo byte senza leggerlo

13 IO di più caratteri get(sink, size, delim) legge size caratteri o finche fino a delim escluso, e li mette nel vettore sink getline(sink, size, delim) idem ma legge e scarta delim read(sink, size) legge size byte e li mette in sink gcount() restituisce il numero di byte letti dallultima lettura ignore(size, delim) ignora size caratteri o fino a delim incluso

14 Classi stream I flussi non permettono copia o assegnamento Non si possono usare direttamente come parametri o tipi di ritorno, ma solo tramite puntatori o riferimenti

15 Input/output object oriented Il meccanismo di IO è indipendente Dal dispositivo Console File Stringa Dimensione del carattere

16 Input/output su file #include ifstream Deriva da istream ofstream Deriva da ostream stream Deriva da iostream

17 Input/output su string #include istringstream Deriva da istream ostringstream Deriva da ostream stringstream Deriva da iostream

18 Stato di uno stream Per ogni oggetto di tipo di stream, es. istream istream::iostate è un tipo intero che è usato per rappresentare lo stato dello stream istream::badbit indica flusso corrotto (non recuperabile) istream::failbit indica fallimento delloperazione di IO (è possibile riprovare) istream::eofbit indica fine del flusso (carattere end-of-file) bad() true se il bit badbit è settato fail() true se il bit failbit è settato eof() true se il bit badbit è settato good() se lo stream è in uno stato valido clear() resetta le condizioni allo stato valido clear(istream::iostate) resetta un flag setstate(istream::iostate) setta un flag rdstate() restituisce lo stato come iostate Si può testare direttamente la validità del flusso, es. while (cin >> a) { //… } Stati indicati come bit si possono combinare tramite |

19 Buffer Tutti gli IO su stream usano un buffer, svuotato Al termine del programma …ma non se cè un crash Quando è pieno Forzandolo, immettendo endl( scrive un newline e svuota il buffer), ends (inserisce un null e svuota il buffer), flush (svuota il buffer e basta) endl e \n sono diversi Immettere unitbuf forza lo svuotamento del buffer ad ogni operazione nounitbuf tie lega loutput di un flusso allinput di un altro flusso, il buffer del primo si svuota quando il secondo legge cin.tie(&cout) lo fa il sistema per noi cin.tie() restiuisce un puntatore al flusso collegato cin.tie(0) annulla il collegamento

20 IO su file ifstream, ofstream, fstream Costruttore che prende nome di un file ifstream infile(prova.txt); string s(prova2.txt); ifstream infile2(s.c_str()); f.open(nomefile); if (f) { //… } f.close(); Serve anche f.clear();

21 File Mode Si può specificare la modalità di apertura di un file Solo per ofstream e fstream: out modalità di output, svuota il file allapertura app output, posizionamento alla fine del file prima di ogni scrittura (preserva il contenuto del file) trunc svuota il file (senza aprirlo) in (modalità di input) solo per ifstream e fstream ate modalità che di apertura che porta immediatamente allend-of-file binary modalità per cui il contenuto è considerato come sequenza di bytes (non si tenta di interpretarli) Es. f.open(file.dat, ofstream::out | ofstream::app)

22 Accesso casuale seek seekg, seekp seekg(position) seekg(offset, dir) dove dir è beg, cur, end tell tellg, tellp cè un solo cursore!

23 Flussi su string I flussi su string servono ad effettuare IO in memoria istringstream, ostringstream, srtingstream string s(pippo); stringstream ss(s); ss.str() restituisce la stringa ss.str(s) copia la stringa su s Tramite flussi su string posso ottenere IO formattato Operatori > ridefiniti

24 Stato della formattazione Oltre allo stato (del flusso), i flussi mantengono uno stato della formattazione usata La formattazione viene variata inserendo nel flusso dei manipolatori flags() restituisce lo stato corrente flags(fmtflags) setta lo stato Es. ostream::fmtflags è il tipo intero unsigned che serve a contenere i flag Alcuni manipolatori sono definiti in iomanip

25 Formattazione dei numeri interi boolalpha stampa i valori booleani come true e false (invece di 1 e 0) noboolalpha hex, oct, dec specificano la base numerica showbase causa la visualizzazione della base 0xnnnn indica un esadecimale 0nnnn indica un ottale nnnn indica un decimale uppercase visualizza esadecimali con lettere maiuscole setbase(int), accetta 8, 10 o 16

26 Formattazione dei numeri in virgola mobile Precisione (numero di cifre) Default 6 Arrotondamento (non troncamento) al numero di cifre desiderato precision() restituisce la precisione corrente precision(int) imposta la precisione Oppure manipolatore setprecision(int) Notazione (decimale o scientifica) Di default dipende dalla dimensione fixed, scientific cout.unsetf(ostream::floatfield) ritorna al default Posizione del punto decimale Di default omesso se non cè parte frazionale showpoint Segno + Di default il + per i numeri positivi è omesso showpos

27 Posizionamento e riempitivi setw(int) imposta la dimensione minima del prossimo output left allinea a sinistra (aggiunge riempitivi a destra) right allinea a destra (aggiunge riempitivi a sinistra) internal aggiunge riempiti tra segno e valore skipws salta gli spazi bianchi dallinput setfill(char) permette di specificare il carattere usato come riempitivo


Scaricare ppt "Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria."

Presentazioni simili


Annunci Google