APPUNTI SUL LINGUAGGIO C

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Uso avanzato di C.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
APPUNTI SUL LINGUAGGIO C
Struct, enum, Puntatori e Array dinamici
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le funzioni.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Fondamenti di Informatica L- A Il linguaggio C Tipi strutturati X Y Z … … N … M-1 NomeCognomeRedditoAliquota
Fondamenti di Informatica A - Massimo Bertozzi ARRAY E STRINGHE Curiouser and curiouser! Alice's Adventures in Wonderland, Lewis Carrol.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Process synchronization
Process synchronization
Gestione della memoria
ELEMENTI DI INFORMATICA
Introduzione al linguaggio C
Struct, enum, Puntatori e Array dinamici
Il linguaggio C Puntatori Moreno Marzolla
Tutorato Elementi di Informatica 2013
Il linguaggio C Strutture Moreno Marzolla
7. Strutture di controllo Ing. Simona Colucci
10. Programmazione Ricorsiva Ing. Simona Colucci
Array n-dimensionali e tipi di dati strutturati
Process synchronization
Process synchronization
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Ambienti di Programmazione per il Software di Base
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C Strutture Dati e Puntatori
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
APPUNTI SUL LINGUAGGIO C
Gestione di un banco di magliette
Gestione di un ristorante
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
La struttura dei primi programma in C
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
APPUNTI SUL LINGUAGGIO C
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Array n-dimensionali e tipi di dati strutturati
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Array e Stringhe Linguaggio C.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

APPUNTI SUL LINGUAGGIO C Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Le Stringhe

Per il momento ignoriamo cosa siano, ne parleremo piu avanti Tipi di dato Tipi di dato elementare: int, double, char, “boolean”, … Tipi di dati complessi : Array monodimensionali Array multidimensionali Puntatori Struct (record) TDA Per il momento ignoriamo cosa siano, ne parleremo piu avanti

typedef < tipo > < nuovo_nome_tipo > ; Il C permette di definire esplicitamente nomi nuovi per i tipi di dati, tramite la parola chiave typedef. L'uso di typedef consente di rendere il codice più leggibile. Il formato dell'istruzione typedef è il seguente: typedef < tipo > < nuovo_nome_tipo > ; in questo modo assegnamo al tipo tipo il nuovo nome nuovo_nome_tipo. Da questo momento in avanti potremo riferirci al tipo di dato tipo sia con il nome tipo sia con il nome nuovo_nome_tipo. Es: typedef int intero; intero i; /* definisce una variabile i di tipo int. */

Stringhe Una stringa è un vettore di caratteri che contiene il carattere terminatore '\0' che indica che i successivi caratteri non sono significativi. L E S T R I N G H \0 I caratteri compresi fra il primo e il carattere '\0' sono quelli significativi della stringa. Dal momento che questo è il modo per indicare dove la stringa finisce, questo carattere deve apparire almeno una volta nel vettore.

Stringhe Es. #define Dim 5 … char ch[Dim]; char s[]=“prova”; p r o v a \0 v r o p s[0] s[1] s[2] s[3] s[4] s[5]

Dichiarazione e inizializzazione delle stringhe Inizializzazione e stampa degli elementi di una stringa #include <stdio.h> #include <string.h> /* ne parliamo tra poco */ main(){ char s[]="Questa e' una Prova"; int i=0; int len=0; len=strlen(s); printf("La stringa %s contiene %d caratteri\n",s,len); for(i=0;i<len;i++) printf(" s[%d]=%c\n",i,s[i]); }

Dichiarazione e inizializzazione delle stringhe Inizializzazione e stampa degli elementi di una stringa #include <stdio.h> #include <string.h> /* ne parliamo tra poco */ main(){ char s[]="Questa e' una Prova"; int i=0; int len=0; len=strlen(s); printf("La stringa %s contiene %d caratteri\n",s,len); for(i=0;i<len;i++) printf(" s[%d]=%c\n",i,s[i]); } Funzione che calcola la lunghezza di una stringa

Dichiarazione e inizializzazione delle stringhe Inizializzazione e stampa degli elementi di una stringa #include <stdio.h> #include <string.h> /* ne parliamo tra poco */ main(){ char s[]="Questa e' una Prova"; int i=0; int len=0; len=strlen(s); printf("La stringa %s contiene %d caratteri\n",s,len); for(i=0;i<len;i++) printf(" s[%d]=%c\n",i,s[i]); } Carattere speciale per indicare al printf che deve stampare una stringa

Formattazione della stringa da parte del compilatore char s[]=“Esempio"; char str[100]; scanf(“%s”,str); // inserisco da input esempio E S E M P I O \0

Dichiarazione e inizializzazione delle stringhe Esempio: Immissione di una stringa statica da tastiera #include <stdio.h> #include <stdlib.h> #define Dim 10; main(){ char s[Dim]; char ch; int i=0; int len=0; scanf("%s",s); len=strlen(s); printf("La stringa %s contiene %d caratteri\n",s,len); } Da notare che in scanf è stato scritto s e non &s, poiché si sta passando una stringa e s è un vettore non una semplice variabile

Dichiarazione e inizializzazione dei vettori I vettori occupano dello spazio in memoria. Il programmatore specificherà il tipo di ogni elemento e il numero di quelli richiesti da ognuno dei vettori, così che il computer possa riservare l’appropriata quantità di memoria. #define M 3 #define N 2 ... int c[M]; int l[N]; int vet[5] = {1, 2, 3, 4, 5}; float r[] = {1.4, 3.2, 5.4 } /* viene allocato un vettore di tre elementi */ È possibile inizializzare un array in fase di dichiarazione. In questo caso, per un vettore, la specifica delle dimensioni è opzionale.

Dichiarazione e inizializzazione dei vettori I vettori occupano dello spazio in memoria. Il programmatore specificherà il tipo di ogni elemento e il numero di quelli richiesti da ognuno dei vettori, così che il computer possa riservare l’appropriata quantità di memoria. #define M 3 #define N 2 ... int c[M]; int l[N]; char vet[] = “blu”; char r[] = {‘b’, ‘l’, ‘u’, ‘\0’ } È possibile inizializzare una stringa in fase di dichiarazione a carico dell’utente. In questo caso, bisogna indicare anche \0

Formattazione della stringa da parte dell’utente char str[100]; char a; int i=0; // inserisco da input esempio for (i=0; i<7; i++) { scanf(“%c”,&a); str[i]=a; } str[i] = ‘\0’; E S E M P I O \0

Stringhe Il C non ha un sistema semplice per costruire le stringhe, così le seguenti assegnazioni non sono valide: char nome[50], cognome[50], nomecognome[50]; nome = "Mario" /* illegale */ cognome = "Rossi" /* illegale */ nomecognome = "Sig."+firstname+lastname /* illegale */ Comunque esiste una libreria di routines per il trattamento delle stringhe ("<string.h >").

Libreria <string.h> #include <string.h> int strcmp(char *string1, char *string2) - Confronta string1 e string. void strcpy(char *string1, char *string2) - Copia string2 in stringl. char *strerror(int errnum) - Ottiene il messaggio di errore corrispondente al numero di errore specificato. int strlen(char *string) - Determina la lunghezza di una stringa. char *strncat(char *string1, char *string2, size_t n) - Aggiunge "n" caratteri di string2 in string1. int strncmp(char *string1, char *string2, size_t n) - Confronta i primi "n" caratteri di due stringhe. char *strncpy(char *string1, char *string2, size_t n) - Copia i primi "n" char *strnset(char *string, char c, size_t n) - Setta i primi "n" caratteri di string a "c". char *strrchr(char *string, char c) - Cerca l'ultima occorrenza del carattere "c" in string.

#include <stdio.h> #include <string.h> #define SMAX 30 typedef char stringa[SMAX]; main() { stringa s1="Lezione",s2,s3; scanf("%s",s2); printf("Lunghezza s2:%d\n",strlen(s2)); printf("Lunghezza s1:%d\n",strlen(s1)); strcpy(s3," di Calcolatori"); strcat(s1,s3); printf("%s\n",s1); if (strcmp(s1,s2)) printf(“Le due stringhe sono identiche”); else printf(“Le due stringhe sono diverse”); }

#include <stdio.h> #include <string.h> #define SMAX 30 typedef char stringa[SMAX]; main() { stringa s1="Lezione",s2,s3; scanf("%s",s2); printf("Lunghezza s2:%d\n",strlen(s2)); printf("Lunghezza s1:%d\n",strlen(s1)); E’ stato definito il tipo stringa per indicare un vettore di caratteri di lunghezza massima 30

Viene inizializzato s1 con “Lezione” #include <stdio.h> #include <string.h> #define SMAX 30 typedef char stringa[SMAX]; main() { stringa s1="Lezione",s2,s3; scanf("%s",s2); printf("Lunghezza s2:%d\n",strlen(s2)); printf("Lunghezza s1:%d\n",strlen(s1)); Viene inizializzato s1 con “Lezione”

Viene stanziato da input s2 #include <stdio.h> #include <string.h> #define SMAX 30 typedef char stringa[SMAX]; main() { stringa s1="Lezione",s2,s3; scanf("%s",s2); printf("Lunghezza s2:%d\n",strlen(s2)); printf("Lunghezza s1:%d\n",strlen(s1)); Viene stanziato da input s2

Punto della situazione 30 L E Z I O N E \0 ---- S1 Ad esempio: 30 M A T T O N E \0 ---- S2

Copia in s3 la stringa “ di Calcolatori” strcpy(s3," di Algoritmi"); strcat(s1,s3); printf("%s\n",s1); if (strcmp(s1,s2)>0) printf(“Le due stringhe sono identiche”); else printf(“Le due stringhe sono diverse”); } Copia in s3 la stringa “ di Calcolatori” char *strcpy(char *string1, char *string2) - Copia string2 in stringl.

Concateno le due stringhe s1 s3: aggiungo in s1 la stringa s3 strcpy(s3," di Algoritmi"); strcat(s1,s3); printf("%s\n",s1); if (strcmp(s1,s2)>0) printf(“Le due stringhe sono identiche”); else printf(“Le due stringhe sono diverse”); } Concateno le due stringhe s1 s3: aggiungo in s1 la stringa s3 char *strncat(char *string1, char *string2, size_t n) - Aggiunge "n" caratteri di string2 in string1.

Punto della situazione 30 L E Z I O N E \0 ---- S1 30 D I A L G ---- I \0 ---- S3 30 S1 Lezione di Algoritmi\0

Confronta le due stringhe s1 e s2 per vedere se s1 e s2 sono simili int strcmp(char *string1, char *string2) - Confronta i caratteri di due stringhe strcpy(s3," di Algoritmi"); strcat(s1,s3); printf("%s\n",s1); if (strcmp(s1,s2)==0) printf(“Le due stringhe sono identiche”); else printf(“Le due stringhe sono diverse”); } Confronta le due stringhe s1 e s2 per vedere se s1 e s2 sono simili

Manipolazione di stringhe #include <stdio.h> #define SMAX 20 typedef char stringa[SMAX]; /********** Prototipi funzioni **********/ void leggiStringa(stringa); /* legge una stringa da input */ void scriviStringa(stringa); /* scrive una stringa in output */ int lung(stringa); /* calcola la lunghezza di una stringa */ void assegna(stringa, stringa); /* esegue l'assegnamento su stringhe */ void concatena(stringa, stringa, stringa); /* concatena due stringhe e pone il risultato in una terza stringa*/ char elemento(stringa, int); /* restituisce l'i-esimo elemento di una stringa */

Manipolazione di stringhe /********** Definizioni funzioni **********/ void leggiStringa(stringa str) { int i=0; char c; while ((c=getchar()) != '\n') str[i++]=c; str[i] = '\0'; } /* N.B. scanf("%s\n", str) è equivalente a leggiStringa(str) */ funzione per richiamare un carattere.

Manipolazione di stringhe void scriviStringa(stringa str) { int i=0; while (str[i] != '\0') { putchar(str[i]); i++; } putchar('\n'); /* N.B. printf("%s\n", str) è equivalente a scriviStringa(str) */ int lung(stringa str) { int i; for (i = 0; str[i] != '\0'; i++); return i; funzione per emettere un carattere

Manipolazione di stringhe void assegna(stringa str1, stringa str2) { int i; for (i = 0; i < lung(str2); i++) str1[i] = str2[i]; str1[i] = '\0'; } void concatena(stringa str1, stringa str2,stringa str3) { int i=0,j=0; for (j = 0; j < lung(str1); i++,j++) str3[i] = str1[j]; for (j = 0; j < lung(str2); i++,j++) str3[i] = str2[j]; str3[i] = '\0';

char elemento(stringa str, int i) { return str[i-1]; } /********** Uso delle funzioni **********/ main() { stringa s1="Lezione"; stringa s2,s3; leggiStringa(s2); printf("Lunghezza:%d\n",lung(s2)); printf("Lunghezza:%d\n",lung(s1)); scriviStringa(s1); scriviStringa(s2); assegna(s2," di Algoritmi"); concatena(s1,s2,s3); scriviStringa(s3); printf("%c\n",elemento(s3,5));

APPUNTI SUL LINGUAGGIO C Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Le Stringhe FINE