Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
APPUNTI SUL LINGUAGGIO C
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Le Stringhe
2
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
3
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. */
4
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.
5
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]
6
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]); }
7
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
8
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
9
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
10
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
11
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.
12
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
13
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
14
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 >").
15
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.
16
#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”); }
17
#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
18
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”
19
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
20
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
21
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.
22
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.
23
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
24
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
25
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 */
26
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.
27
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
28
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';
29
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));
30
APPUNTI SUL LINGUAGGIO C
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Le Stringhe FINE
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.