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

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

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

Le stringhe. Le stringhe

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

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Le Stringhe. Un introduzione operativa. Luigi Palopoli

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Lezione 5 Sottoarray di somma massima

Ricerca binaria (o dicotomica) di un elemento in un vettore

Array multidimensionali e stringhe

Linguaggio C - Stringhe

Stringhe e allocazione dinamica della memoria

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.

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

Il paradigma OO e le Classi

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

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

Sottoprogrammi: astrazione procedurale

Informatica 1. Prova di recupero 21 Settembre 2001

Ricerca sequenziale di un elemento in un vettore

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

Le operazioni di allocazione e deallocazione sono a carico del sistema.

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

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

Fondamenti di Informatica 2

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

Dati aggregati. Violetta Lonati

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

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

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

Caratteri e stringhe

Gestione di files Motivazioni

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

Programmazione modulare

4 GLI ARRAY E LE STRINGHE

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Laboratorio di Informatica

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Linguaggio C La libreria standard

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

Esercitazione 12. Esercizi di Ricapitolazione

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Corso di Fondamenti di Informatica

I puntatori e l allocazione dinamica di memoria

Programmazione I - Laboratorio

Laboratorio di Algoritmi e Strutture Dati

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Esercitazione 6. Array

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

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

costruttori e distruttori

Sistemi Operativi (M. Cesati)

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

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

Strutture Dinamiche. Fondamenti di Informatica

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Algoritmi di Ricerca. Esempi di programmi Java

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

Informatica! Appunti dal laboratorio 1!

Programmazione I - Laboratorio

RICERCA DI UN ELEMENTO

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

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

Elementi di C++ di base

Laboratorio di programmazione

Corso Programmazione 1 Capitolo 01: Concetti Elementari

Prova Scritta del 19/07/10

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Gestione dinamica della memoria

Transcript:

Alessio Bechini - Corso di - Gestione di stringhe Parte del materiale proposto è stato gentilmente fornito da G. Lipari Le stringhe in C/C++ In C e in C++ non esiste un vero e proprio tipo stringa. Una stringa è vista come una sequenza di caratteri terminata da \0, contenuta in uno spazio in memoria (buffer, spesso implementato come array). La gestione delle stringhe così concepite è facilitata da un insieme di funzioni in <string.h>, <stdlib.h> Le librerie standard del C++ forniscono la classe string, che solleva il programmatore dalle problematiche di allocazione dei buffer. Gestione di stringhe in C/C++ 2 Gestione di stringhe in C/C++ 1

Defininizione e inizializzazione di una stringa char s0[11]; // può contenere una stringa di 10 caratteri char s1[] = stringa contenuta in s1 ; // con inizializz. char s2[21] = ciao // array parzialmente riempito char *ps0 = Il fiume Arno attraversa Pisa ; // si alloca la stringa in memoria staticamente, // accedendovi tramite ps0 const char *ps1 = Buongiorno ; // per evitare overflow // sul buffer della stringa Gestione di stringhe in C/C++ 3 Lettura e scrittura di una stringa // si legge fino al primo spazio cin >> s; // si legge fino al new line, per un massimo di max caratteri cin.getline( s, max ); // si stampa l intera stringa puntata da s, da *s fino a \0 cout << s; Gestione di stringhe in C/C++ 4 Gestione di stringhe in C/C++ 2

Assegnazione tra stringhe L assegnazione tra stringhe non può essere fatta semplicemente usando l operatore = (consentita solo per l inizializzazione). Si utilizza invece una funzione che provvede a copiare i caratteri ad uno ad uno. Si possono avere due versioni della funzione strcpy: void strcpy(char *s, const char *t) char *strcpy(char *s, const char *t) Gestione di stringhe in C/C++ 5 Due implementazioni di strcpy char *strcpy(char *s, const char *t) { char *p; for(p=s; (*p++ = *t++)!= \0 ; ); return s; void strcpy(char *s, const char *t) { while(*s++ = *t++); Permette concatenazione Gestione di stringhe in C/C++ 6 Gestione di stringhe in C/C++ 3

Altre operazioni su stringhe Concatenazione: char *strcat(char *s, const char *t) Determinazione di lunghezza: int strlen(char *s) oppure anche attraverso sizeof Comparazione: int strcmp(const char *s, const char *t) // 0 se uguali, <0 se s<t, >0 se s>t Ricerca di carattere in stringa: char *strchr(const char *s, const char c) Ricerca di sottostringa in stringa: char *strchr(const char *s, const char *t) Gestione di stringhe in C/C++ 7 La classe string #include <string> using namespace std; int main() { string s1 = Hello ; string s2 = world ; Le librerie standard forniscono il tipo string; il programmatore può disinteressarsi del problema della lunghezza delle stringhe. string s3 = s1 + + s2; cout << s3 << \n ; void respond(const string &answer) { if (answer = = yes ) {... else if (answer = = no ) {... else cout << Please answer y/n\n ; La classe string è stata scritta per la piena compatibilità con le stringhe C classiche Gestione di stringhe in C/C++ 8 Gestione di stringhe in C/C++ 4

Costruttori per string string s0; // stringa vuota string s1( ciao ) // s2 contiene ciao string s2(s1); // crea s2, copiandovi poi s1 string s3( x ); // s3 contiene la stringa x char *ps = Salve a tutti ; string s4(ps); // s4 contiene Salve a tutti string s5(s4, 3,10) // s5 contiene ve a tut Gestione di stringhe in C/C++ 9 Metodi di string: esempi string name = Giuseppe Lipari ; void substitute() { string s = name.substr(9,6); name.replace(0,8, Roberto ); cout << name[0] << name[1] << name[2] << \n ; void f() { printf( name : %s\n, name.c_str()); // name becomes Roberto Lipari // prints Rob Gestione di stringhe in C/C++ 10 Gestione di stringhe in C/C++ 5

Comparazione di oggetti string Le istanze di string possono essere comparate con gli operatori standard; L ordinamento standard tra stringhe è quello alfabetico string a = Peppe ; string b = Gianni ; string c = Gianni ; void cmp(const string &s1, const string &s2) { cout << s1; if (s1 = = s2) cout << = = ; else if (s1 < s2) cout << < ; else cout << > ; cout << s2 << \n ; cmp(a,b); cmp(b,c); cmp(c,a); // prints Peppe > Gianni // prints Gianni == Gianni // prints Gianni < Peppe Gestione di stringhe in C/C++ 11 Input/Output con oggetti string Come leggere una parola Come leggere/scrivere un intera linea int main () { string str; cout << please, enter your name ; cin >> str; cout << Hello << str <<!\n ; int main () { string str; cout << please, enter your name ; getline(cin, str); cout << Hello << str <<!\n ; Gestione di stringhe in C/C++ 12 Gestione di stringhe in C/C++ 6

Altri metodi di string La classe string fornisce metodi per tutte le operazioni più comunemente usate con le stringhe: Inserimento di sottostringa (insert) Sostituzione/rimozione di caratteri (replace, remove) Accesso a una sottostringa (substr) Comparazione (compare) Ricerca di sottostringhe (find)...e molte altre ancora (v. libreria) Gestione di stringhe in C/C++ 13 Gestione di stringhe in C/C++ 7