Le stringhe. Le stringhe



Documenti analoghi
Gestione delle stringhe in C

Linguaggio C - Stringhe

Codifica: dal diagramma a blocchi al linguaggio C++

Breve riepilogo della puntata precedente:

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

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Caratteri e stringhe Esercizi risolti

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Corso di Fondamenti di Informatica

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Esempio: Array di struct

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Funzioni in C. Violetta Lonati

Record in C: il costruttore struct.

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Introduzione al linguaggio C Gli array

INFORMATICA - I puntatori Roberta Gerboni

10 - Programmare con gli Array

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard)

La struttura dati ad albero binario

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Gestione dei File in C

Algoritmi di Ricerca. Esempi di programmi Java

Prova Scritta del 19/07/10

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

RICERCA DI UN ELEMENTO

I file di dati. Unità didattica D1 1

Funzioni. Il modello console. Interfaccia in modalità console

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Definizione di nuovi tipi in C

Calcolare il massimo di una lista

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

Lab 11 Gestione file di testo"

4 3 4 = 4 x x x 10 0 aaa

Gestione dei File. dischi nastri cd

Matlab: Strutture di Controllo. Informatica B

Esame del 3 febbraio 2010

Introduzione al Linguaggio C

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Le variabili. Olga Scotti

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

Introduzione alla programmazione in C

Linguaggio C. Fondamenti. Struttura di un programma.

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Corso di Informatica

LINGUAGGI DI PROGRAMMAZIONE

Esercizi di programmazione in C

puntatori Lab. Calc. AA 2007/08 1

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Algebra booleana. Si dice enunciato una proposizione che può essere soltanto vera o falsa.

RISOLUTORE AUTOMATICO PER SUDOKU

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P P P P P P < P 1, >

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Alcune regole di base per scrivere un programma in linguaggio C

Corso di Fondamenti di Informatica Tipi strutturati: Stringhe

File di testo e file binari Directory

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/ III Informatica Serale I.T.I.S.

Fondamenti di Informatica 2

Corso di Programmazione ad oggetti

Corso sul linguaggio Java

Dott.ssa Adriana Pietramala. Dott.ssa Maria Vittoria Avolio

Variabili e tipi di dato

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008

Concetto di Funzione e Procedura METODI in Java

ALGEBRA DELLE PROPOSIZIONI

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Lezione XI Le stringhe

Strutturazione logica dei dati: i file

Editor vi. Editor vi

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

Le Stringhe. Un introduzione operativa. Luigi Palopoli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Esercizio 1. Esercizio 2

Rappresentazione dell informazione Codifica Binaria

4. Un ambiente di sviluppo per Java

Inizializzazione, Assegnamento e Distruzione di Classi

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

FUNZIONI AVANZATE DI EXCEL

Esercizio 2. Client e server comunicano attraverso socket TCP

Transcript:

Informatica: C++ Gerboni Roberta Stringhe di caratteri (esempi di utilizzo dei vettori) Nel linguaggio C++ una stringa è semplicemente un vettore di caratteri Vettori di caratteri La stringa "hello" è in realtà un vettore di caratteri ogni carattere occupa un byte I vettori di caratteri possono essere inizializzati usando stringhe letterali char Saluto[ ] = "Hello"; le stringhe terminano con il carattere NULL '\0' (0 della tabella ASCII) Il vettore Saluto ha in realtà 6 elementi char Nome[ ] = {'M', 'a', 's', 's', 'i', 'm', 'o' }; H e l l o \0 Accesso ai singoli caratteri: Nome[ 1 ] è il carattere 'a' M a s s i m o \0 Il nome del vettore è l indirizzo del primo elemento del vettore stesso 2

Dichiarazione di una stringa in C++: char nome_variabile[dimensione]; Segue le stesse regole di un vettore di tipo numerico, dove il tipo è char. E possibile inizializzare una stringa al momento della dichiarazione: char Nazione[16] = "Italia"; I t a l i a \0 Sono riempiti solo i primi 7 elementi del vettore (6 + NULL), e gli altri non sono usati, al momento. Se il numero di caratteri supera la dimensione della variabile viene segnalato ERRORE. possono contenere anche spazi bianchi: char Nazione[16]= REPUBBLICA CECA ; R E P U B B L I C A C E C A \0 3 Stampa di una stringa: cout E possibile stampare un elemento per volta, all interno di un ciclo for proprio come si fa per un vettore di tipo numerico, ma attenzione alla condizione di uscita dal ciclo (non è detto che sia nota a priori la lunghezza di una stringa): // stampa di una stringa for (int i=0; Nazione[i]!='\0' ; i++) cout << Nazione[i]; // stampa fino a quando non viene trovato il carattere NULL di fine stringa Che è equivalente a scrivere: // stampa di una stringa // stampa fino a quando non for (int i=0; Nazione[i] ; i++) viene trovato il valore binario 0 cout << Nazione[i]; che equivale al valore FALSO 4

Stampa di una stringa: cout A differenza dei vettori numerici, la stampa di una stringa si ottiene anche semplicemente scrivendo il suo nome nel cout senza l uso dell indice di scorrimento degli elementi: // stampa di una stringa cout << Nazione; 5 Lettura di una stringa da tastiera: cin A differenza dei vettori numerici, la lettura di una stringa si ottiene semplicemente scrivendo il suo nome nel cin senza l uso dell indice di scorrimento degli elementi: char Nazione[16]; // lettura di una stringa cout << Inserisci il nome della nazione ; cin >> Nazione; 6

Lettura di una stringa da tastiera: cin Si deve tener presente che cin acquisisce caratteri da tastiera con la seguente limitazione: si possono leggere soltanto parole e non intere frasi in quanto l'operatore di estrazione usa come delimitatore qualsiasi occorrenza di un carattere invisibile (spazio, tabulazione, nuova linea). Questo significa che se un nome contiene uno spazio bianco viene considerato non una stringa, ma due stringhe. char Nazione[16]; char Cognome[10]; // lettura di una stringa cout << Inserisci la nazione ; cin >> Nazione; cout << Inserisci il cognome ; cin >> Cognome; Nazione Cognome R E P U B C E C A \0 Se da tastiera viene digitato REPUBBLICA CECA, il cin legge solo REPUBBLICA e la parola CECA viene letta con il cin successivo. B L I C A \0 7 Lettura di una stringa da tastiera: gets Uno dei modi per superare il problema di poter leggere da tastiera stringhe contenenti il carattere spazio è utilizzare la funzione gets della libreria stdio.h: gets (stringa); // la stringa può contenere spazi bianchi Esempio: #include <iostream> #include <stdio.h> using namespace std; int main( ) { char Cognome[20]; cout<<"inserisci il cognome : "; gets (Cognome); La funzione gets trasferisce l intero buffer di input nella stringa Cognome e riconosce come unico terminatore il carattere new line (INVIO) che é sempre l ultimo carattere del buffer e lo sostituisce con il carattere NULL. 8

Lettura di una stringa da tastiera: cin.getline Un altro modo per poter leggere da tastiera stringhe contenenti il carattere spazio è utilizzare la funzione cin.getline della libreria stdio.h: cin.getline (stringa, max); Esempio: #include <iostream> #include <stdio.h> using namespace std; int main( ) { char Indirizzo[80]; cout<<"inserisci l indirizzo: "; cin.getline (Indirizzo, 80); // vengono letti i caratteri inseriti qualsiasi essi siano fino a new line (INVIO) o per un massimo di max 1 caratteri. La stringa viene completata con \0. 9 Lettura di una stringa da tastiera Riassumendo char S[30]; cin >> S; gets( S); // si legge fino al primo spazio (cin interrompe l acquisizione di un avariabile quando viene incontrato uno spazio bianco) // si legge fino al new line (INVIO). cin.getline( S, max ); // si legge fino al new line, per un massimo di max 1 caratteri. La stringa viene completata con \0. Attenzione: può accadere che nel buffer di input restino dei caratteri non letti, perché eccedenti la dimensione della stringa che viene acquisita da tastiera (es. la stringa è di 30 car. e ne digitiamo 35). Questi caratteri residui (nel nostro es. 5) andrebbero a finire nel successivo input e il programma non si fermerebbe in attesa di digitazione da tastiera trovando già i caratteri nel buffer. 10

Le funzioni di libreria per le stringhe Una stringa è un vettore e per questo motivo non è possibile ad esempio copiarne direttamente il contenuto in un altra stringa o confrontare direttamente due stringhe. Esistono delle funzioni predefinite contenute nella libreria string.h. Qui di seguito ve ne sono elencate alcune delle più usate: strlen() strcpy() strncpy() strcat() strncat() strcmp() strncmp() Calcola la lunghezza di una stringa Copia una stringa in un altra stringa Copia i primi n caratteri di una stringa in un altra stringa Concatena due stringhe Concatena i primi n caratteri di una stringa ad un altra stringa Confronta due stringhe Confronta i primi n caratteri di due stringhe 11 Le funzioni di libreria per le stringhe strlen(str1) restituisce il numero di caratteri che compongono una stringa (escluso il carattere NULL) int n; char Nazione[16]= Italia ; n= strlen (Nazione); // n conterrà il valore 6 12

Le funzioni di libreria per le stringhe strcpy(str1, Str2) copia la stringa Str2 nella stringa Str1. L eventuale contenuto di Str1 precedente all assegnamento viene perso. Attenzione: la dimensione di Str1 deve essere sufficientemente ampia da accogliere tutti i caratteri di Str2 compreso il terminatore '\0. Se il numero di caratteri della variabile sorgente supera la dimensione della variabile destinazione NON viene segnalato ERRORE a run time. char Studente[30]; char Cognome[15]= Rossi ; strcpy (Studente, Cognome); // Studente conterrà la stringa Rossi 13 Le funzioni di libreria per le stringhe strcat(str1, Str2) concatena la stringa Str2 in fondo alla stringa Str1 (appende in fondo) e valgono le stesse avvertenze di strcpy. int n; char Studente[30]; char Cognome[15]= Rossi, Nome[10]= Mario ; strcpy (Studente, Cognome); // Studente conterrà la stringa Rossi strcat (Studente, ' '); // Concatena lo spazio strcat (Studente, Nome); // Concatena il nome Studente R o s s i M a. r i o \0 14

Le funzioni di libreria per le stringhe strcmp(str1, Str2) confronta la stringa Str1 con la stringa Str2. Restituisce: il valore 0 se le stringhe sono identiche un valore <0 (-1) se la stringa Str1 è minore di Str2 un valore >0 (1) se la stringa Str1 è maggiore di Str2 La relazione d ordine tra stringhe è definita dalla relazione d ordine della codifica ASCII dei caratteri che la compongono: 0 < 9 < A < Z < a < z. Il confronto viene fatto partendo dal primo carattere di entrambe le stringhe e se sono uguali continua confrontando la successiva coppia di caratteri delle due stringhe fino a quando non viene trovata una coppia di caratteri diversi o non viene raggiunto il NULL di fine di una delle due stringhe. 15 Le funzioni di libreria per le stringhe strcmp(str1, Str2) confronta la stringa Str1 con la stringa Str2. Esempio:.. char s1[10]= ieri ; char s2[10]= oggi ; int c; c = strcmp(s1, s2); if (c==0) cout<< le due stringhe sono uguali ; if (c<0) cout <<s1<< è minore di <<s2; cout <<s1<< è maggiore di <<s2;.. 16

Stringhe (la classe string) Le librerie standard consentono di definire variabili di tipo string. Con questo tipo di variabili il programmatore può disinteressarsi del problema della lunghezza delle stringhe. Esempio #include <string> using namespace std; int main() {string s1 = Hello ; string s2 = world ; string s3 = s1 + + s2; cout << s3 << endl; } Con le variabili di tipo string la concatenazione tra stringhe avviene con l operatore +. Nell esempio sul monitor comparirà: Hello world 17 Stringhe (la classe string) Con le variabili di tipo string si possono utilizzare gli operatori di confronto come per le variabili numeriche (==, <, <=, >, >= e!=). string a = Paolo ; string b = Gianni ; if (a = = b) cout <<a << = <<b; if (a < b) cout <<a << < <<b; cout <<a << > <<b;.. sul monitor compare: Paolo > Gianni string a = Paolo ; string b = Paolo ; if (a = = b) cout <<a << = <<b; if (a < b) cout <<a << < <<b; cout <<a << > <<b;.. sul monitor compare: Paolo = Paolo 18

Stringhe (la classe string) Dichiarazione di un vettore di stringhe string Nazioni[5]; // questo è un vettore costituito da 5 elementi, ciascuno di tipo string // lettura da tastiera degli elementi del vettore (ricordare che cin non consente l acquisizione di stringhe contenenti spazi bianchi) for (int i =0; i < 5; i++) { cout << Inserisci la nazione di posizione <<i<< : ; cin >> Nazioni [ i ]; } 0 1 2 3 4 Vettore Nazioni Italia Francia Spagna Inghilterra Germania 19 Stringhe (la classe string) // Visualizza il contenuto degli elementi for (int i =0; i < 5; i++) cout<< Nazioni [ i ]<<endl; Italia Francia Spagna Inghilterra Germania 20