Stringhe: vettori di caratteri con terminatore

Documenti analoghi
Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Corso di Fondamenti di Informatica Tipi strutturati: Stringhe

Lezione 8: Stringhe ed array multidimensionali

Fondamenti di Informatica Ing. Biomedica

Stringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14

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

Esercitazione di Reti degli elaboratori

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 2 Dott. Michele Zanella Ing. Gian Enrico Conti

Stesura informale dell algoritmo: (lasciata come esercizio)

Linguaggio C - Stringhe

Elementi di Informatica

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

Caratteri e stringhe

I tipi strutturati e i record in C++

Algoritmo di ordinamento per sostituzione. Esempio : dato l array :

L AMBIENTE CODE BLOCKS E L IO

Caratteri e stringhe

Esempio: quanto mi piace questo corso! qufuafantofo mifi pifiafacefe qufuefestofo coforsofo!

Implementazione dell albero binario in linguaggio C++

Variabili e Funzioni. Informatica 1 / 19

Informatica A (per gestionali) A.A. 2004/2005. Esercizi di programmazione C Stringhe Ricerca binaria

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

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome

Esercizi. Stringhe. Stringhe Ricerca binaria

A. Veneziani - Le variabili puntatore

Le strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?

(Def. funzioni con parametri di tipo matrice)

Elementi di Informatica A. A. 2016/2017

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

File. Unità 8. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione.

Il buffer di input. In questo modo, tutte le chiamate alla funzione permetteranno all'utente di inserire caratteri.

Le stringhe. Un vettore di caratteri non è necessariamente una stringa perché non sempre termina con \0.

Politecnico di Torino

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Esercitazione 12. Esercizi di Ricapitolazione

Dati due punti sul piano calcolare la loro distanza

Lab 08 Stringhe e strutture

Giochi di parole. D Conta vocali

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

struct costobiglietto { //struttura per prezzo float prezzo; float tasse; float prezzototale; };

Nota: Si consideri il valore di pi greco.

Struttura dei programmi e Variabili

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

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

Informatica (A-K) 14. Linguaggio C -4

Algoritmo di ordinamento per scambio (a bolle o bubble sort)

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Corso di Informatica A.A

Esercizio 1 (15 punti)

Introduzione al C++ Parte 2

Corso Programmazione

Per fare riferimento ad un elemento, specificare il nomedel vettore. numerodi posizione(indice)

a.a Codice corso: 21012, 22010

ELEMENTI DI INFORMATICA. Linguaggio C

Programmazione in Java (I modulo)

Argomenti. Array. Stringhe. Merge sort

Fondamenti di Informatica T-1 Modulo 2

Strutture dati. Operatori di incremento e decremento. Strutture di dati. Strutture di dati. ++ e -- Esempi. Vettori e matrici.

Fondamenti di Informatica

L AMBIENTE CODE BLOCKS E L IO

PROGRAMMAZIONE AVANZATA JAVA E C

Stringhe. Unità 8. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

ESERCIZIO: SHIFT ARRAY (1)

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

Fondamenti di Informatica Ing. Biomedica

Le stringhe in C++ Utilizzo della classe string in un programma C++ Alessandro Bugatti 31 ottobre 2007

Elementi di Informatica A. A. 2016/2017

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

Esercizi sulle stringhe

Caratteri e stringhe Esercizi risolti

IL TEOREMA DI BOEHM-JACOPINI

I CARATTERI E LE STRINGHE

a.a Codice corso: 21012

Esercizi C su array e matrici

ARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C

Informatica Applicata

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

Università di Roma Tor Vergata L16-1. Ricerca: esaminare una collezione di dati, cercando un particolare valore. nome e cognome

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

C: panoramica. Violetta Lonati

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

Corso di Fondamenti di Informatica

Fondamenti di Informatica T-1 Modulo 2

Esercizio 1: media di numeri reali (uso funzioni e struct)

Lezione 8 Struct e qsort

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

INFORMATICA 2010/11 - CdL in FISICA TERZO APPELLO 8/09/2011: SOLUZIONI PROPOSTE

A. Ferrari. stringhe di caratteri In linguaggio C

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008

Transcript:

Stringhe: vettori di caratteri con terminatore L applicazione più comune degli array ad una dimensione è la creazione di stringhe 1. Nel linguaggio C++ tradizionale una stringa viene definita come un array di caratteri che finisce con un terminatore NULL. Un NULL viene specificato come \0 e ha valore zero. E pertanto necessario che un array di caratteri venga dichiarato più grande di una unità rispetto alla stringa più lunga che deve contenere. Il compilatore C++ aggiunge automaticamente il terminatore se si dichiara una variabile come costante stringa cioè racchiudendola tra doppi apici. Pertanto, se si deve dichiarare una stringa s che deve contenere la parola Ciao si userà la sintassi: ed effetto in memoria E possibile accedere ai singoli elementi (caratteri identificati da singolo apice) ed eventualmente modificarli. Il ciclo seguente, ad esempio, modifica tutti i caratteri della stringa s sostituendoli col carattere w : 1 Stringa: in informatica una sequenza di caratteri alfanumerici, p.es. una parola, una frase. Di solito la stringa è terminata da un carattere speciale (p.es. il carattere 0 del codice ASCII).

Uso di stringhe: vettori di caratteri con terminatore /*=============================================================================== Si vuole giocare al gioco dell'impiccato. Il conduttore del gioco propone una parola che rimane segreta e di cui la lunghezza e' nota. Lo scopo che si vuole raggiungere è indovinare la parola in un numero di tentativi fissato. Il giocatore propone una lettera: se è contenuta nella parola segreta, il conduttore del gioco la scrive su monitor in tutte le posizioni in cui compare nella parola. Il giocatore vince se riesce ad indovinare con un numero di tentativi inferiori o uguali al numero prefissato. ================================================================================*/ #include <cstring> // uso di strlen() che ritorna la lunghezza della stringa (eccettuato il terminatore NULL) // uso di strcmp() che confronta due stringhe carattere per carattere #include <cctype> // o <cstdlib> o <ctype.h> per tolower() per formato dei caratteri minuscolo int main() const int DIM = 7; const int tentativi = DIM-1; // numero dei tentativi pari al numero di lettere della parola char ch; int i, num = 0; // inizializzo contatore dei tentativi fatti char parola[dim] = "...", // una stringa termina con NULL espresso come intero cioè '\0' segreta[] = 'c','i', 'c', 'c', 'i','o','\0'; cout << "\nla lunghezza della parola e' di "; cout << strlen(segreta) <<" lettere\n"; cout << "\nhai " << tentativi <<" tentativi\n"; while(num<tentativi) cout << "\n\nimposta un carattere: "; cin >> ch; ch= tolower(ch); for (i=0; i< DIM-1; i++) if (ch == segreta[i]) parola[i] = segreta[i]; cout << parola[i]; num++; int result = strcmp(parola, segreta); if(result == 0) cout <<"\n\nbravo\n\n"; if (num >= tentativi) cout <<"\n\nla parola era "; for (i=0; i< DIM-1; i++) cout << segreta[i]; cout << endl << endl; cin.ignore (DIM, '\n'); // aggiorno numero tentativi // ignora il formato dei caratteri (minuscolo/maiuscolo)

/*=================================================================================== ordinamento per ordinare si INTENDA in modo CRESCENTE: Modo: BUBBLE SORT per ordine alfabetico facendo affiorare i valori minimi con continui confronti e scambi tra due elementi consecutivi; la prima scansione considera gli elementi con indice N ed N-1. - con uso di "enum" che consente di associare nomi simbolici a numeri interi raggruppandoli in unico insieme ad esempio enum NO, SI Ordinato dichiara: una variabile di nome Ordinato di tipo enumerazione e il compilatore associerà automaticamente una serie di interi crescenti iniziando da zero per realizzare il costrutto: fai... mentre (NON E' Ordinato) NB: caso peggiore è sequenza ordinata in ordine inverso dove N confronti = N*(N-1)/2 come per selection ===================================================================================*/ #include <cstring> #define N 20 void Acquisisci(); void Ordina(); void Stampa(); char Dati[N]; int main() cout << "\n\t\t\t\tbubble SORT\n\n"; Acquisisci(); cout << "\n\t\t\t*** Prima dell'ordinamento ***\n\n"; Stampa (); Ordina(); cout << "\n\t\t\t*** Dopo l'ordinamento ***\n\n"; Stampa (); cin.ignore (N, '\n');

void Acquisisci () cout << "Scrivi la stringa [massimo "<< N-2 << " caratteri] : "; cin >> Dati; void Ordina() enum NO, SI Ordinato; int fine = strlen(dati), Top = (fine-1), Bottom =0, i, posizione; char minimo; posizione = Bottom; do Ordinato = SI; for (i = Top; i>posizione; i--) // elementi superiore e inferiore // del vettore da ordinare // come una freccia che indica il livello di ordinamento // raggiunto scansione dopo scansione // carattere minimo if (Dati[i]<Dati[i-1]) minimo = Dati[i]; // scambio Dati[i] = Dati[i-1]; Dati[i-1]= minimo; Ordinato = NO; posizione++; while(!ordinato); void Stampa() int i; cout << "Vettore dei dati\n"; for (i = 0; i<n-1; i++) if (Dati[i] == '\0') cout << "Dati[" << i << "] = " << Dati[i] << "\n"; cout << "\n\n";

/*=================================================================================== Ordinamento per ordine alfabetico (si INTENDA in modo CRESCENTE): Modo: Selection Sort cioè ordinamento per selezione di tipo "per minimi successivi" NB: Numero confronti = N*(N-1)/2 ===================================================================================*/ #include <cstring> #define N 20 void Acquisisci(); void Ordina(); void Stampa(char[]); char Dati[N], ordinato[n]; int fine; // prototipi di funzioni // visibilità globale // lunghezza effettiva della stringa int main() cout << "\n\t\t\t\tselection SORT\n\n"; Acquisisci(); cout << "\n\t\t\t*** Prima dell'ordinamento ***\n\n"; Stampa (Dati); Ordina(); cout << "\n\t\t\t*** Dopo l'ordinamento ***\n\n"; Stampa (ordinato); cin.ignore (N, '\n'); void Acquisisci () cout << "Scrivi la stringa [massimo "<< N-2 << " caratteri] : "; cin >> Dati; fine = strlen (Dati); void Ordina() char minimo = Dati[0]; // carattere minimo provvisorio for (int z = 0; z <fine; z++) // indice di posizione per l ordinamento for (int i = 0; i< fine-1; i++) if ( Dati[i+1] < minimo) minimo = Dati[i+1]; // ricerca minimo ordinato[z] = minimo; // si memorizza nella posizione for (int j = 0; j<fine; j++) // soluzione ingenua con "eliminazione" invece di scambio di posizione if (Dati[j] == minimo) Dati[j] = ' '; // unico carattere da eliminare sostituendolo con carattere 124 ASCII minimo = Dati[0]; // carattere minimo provvisorio void Stampa(char D[]) cout << "Vettore dei dati\n"; for (int i = 0; i<fine; i++) cout << "Dati[" << i << "] = " << D[i] << "\n"; cout << "\n\n";