Stringhe di caratteri 1
Rappresentazione Sommario Dichiarazione Indice di un carattere in una stringa Operazione su stringhe Errori comuni 2
Rappresentazione Ricorda: In memoria le celle di un array sono contigue ogni cella ha un indirizzo 0x1FFE 0x1FFF 0x2000 0x2001 0x2002 etc 3
Rappresentazione Ricorda: Nella dichiarazione una variabile è un contenitore di un valore Esempio char ch; ch = B ; 0x1FFE 0x1FFF 0x2000 0x2001 0x2002 B ch etc 4
Rappresentazione Dichiarazione di una stringa individua un array di celle ogni cella contiene un char fornisce l indirizzo della prima cella Esempio char name[5]; Specifica il numero di celle dell array 5
Rappresentazione Dichiarazione di una stringa individua un array di celle ogni cella contiene un char fornisce l indirizzo della prima cella Esempio char name[5]; name è 0x2000 0x2000 0x2004 6
Array e stringhe di caratteri Una stringa di caratteri è un array di char Una stringa di caratteri deve avere il carattere terminale ( \0 ) Il carattere terminale permette a scanf() e printf() di manipolare le stringhe efficacemente 7
Stringhe di caratteri Dichiarazione char name[5]; Dichiarazione #define MAXLENGTH 5 char name[maxlength]; name è 0x2000 0x2000 0x2004 8
Input/Output di stringhe #include <stdio.h> #define MAXLENGTH 15 Non serve &, il nome stesso individua l indirizzo int main() { char string1[maxlength]; char string2[maxlength]; scanf("%s %s", string1, string2); printf("%s %s\n", string1, string2); } return 0; 9
Dichiarazione di stringhe Dichiarazione char name[5] = Ann ; Carattere terminale \0, segna il fine-stringa name è 0x2000 0x2000 A n n \0 0x2004 10
Dichiarazione di stringhe Dichiarazione Al più 4 lettere, l ultima deve essere \0 char name[5] = Ann ; name è 0x2000 A n n \0 0x2000 0x2004 11
Dichiarazione di stringhe Dichiarazione char name[] = Ann ; Usa una cella extra per \0 name è 0x2000 0x2000 A n n \0 0x2003 12
Dichiarazione di stringhe Dichiarazione char *name = Ann ; Se si prova a modificare questa stringa, il risultato è segmentation fault 0x3000 name A n n \0 0x3000 0x3003 13
Dichiarazione di stringhe Dichiarazione char name[]; Stringa di lunghezza arbitraria? No, errore! 14
Un carattere in una stringa La dimensione di una stringa di caratteri è fissata Per raggiungere il carattere alla posizione indice, l (indice+1)-esimo carattere: string[indice] Il primo carattere ha indice 0 15
Un carattere in una stringa 0x3995 0x399C name è 0x3995 J o h n \0 indice 0 indice 4 char name[8] = John ; int i = 2; printf( Il carattere in posizione %d è %c.\n, i, name[i]); output: Il carattere in posizione 2 è h. 16
Un carattere in una stringa 0x3995 0x399C name è 0x3995 J o hx n \0 indice 2 char name[8] = John ; name[2] = X ; printf( Nome: %s\n, name); 17
Un carattere in una stringa 0x3995 0x399C name è 0x3995 J o X n \0 indice 2 char name[8] = John ; name[2] = X ; printf( Nome: %s\n, name); output: Nome: JoXn 18
Operazioni con le stringhe #include <string.h> Assegnamento: strcpy() Concatenazione: strcat() Confronto: strcmp() Lunghezza: strlen() 19
#include <stdio.h> #include <string.h> #define MAXLENGTH 100 Assegnamento int main() { char string1[maxlength]; char string2[maxlength]; strcpy(string1, Hello World! ); strcpy(string2, string1); } return 0; string1: <spazzatura> string2: <spazzatura> 20
Assegnamento #include <stdio.h> #include <string.h> #define MAXLENGTH 100 int main() { char string1[maxlength]; char string2[maxlength]; strcpy(string1, Hello World! ); strcpy(string2, string1); } return 0; string1: Hello World! string2: <spazzatura> 21
Assegnamento #include <stdio.h> #include <string.h> #define MAXLENGTH 100 int main() { char string1[maxlength]; char string2[maxlength]; strcpy(string1, Hello World! ); strcpy(string2, string1); } return 0; string1: Hello World! string2: Hello World! 22
Esempio char name1[5] = Ann ; char name2[5] = Dave ; name2 = name1; Errori Comuni Utilizzo del nome di stringa come Lvalue (variabile di tipo indirizzo) Errore! Richiesta una Lvalue-expression! - name2 contiene l indirizzo del primo valore dell array ma non è una variabile di tipo indirizzo 23
Esempio Errori Comuni Utilizzo del nome di stringa come Lvalue (variabile di tipo indirizzo) char name1[5] = Ann ; char name2[5] = Dave ; &(name2[0]) = name1; Errore! Richiesta una Lvalue-expression! - &(name2[0]) restituisce l indirizzo del primo valore dell array ma non è una variabile di tipo indirizzo 24
Attenzione Assegnamento di indirizzo Esempio char *name1 = Ann ; char *name2 = Dave ; name2 = name1; 25
Attenzione Assegnamento di indirizzo char *name1 = Ann ; char *name2 = Dave ; 0x2000 name1 A n n \0 0x2000 0x2003 0x3990 name2 D a v e \0 0x3990 0x3994 26
Attenzione Assegnamento di indirizzo name2 = name1; 0x2000 name1 A n n \0 0x2000 0x2003 0x2000 name2 D a v e \0 0x3990 0x3994 27
Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye string2:, Cruel 28
Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye, Cruel string2:, Cruel 29
Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye, Cruel, Cruel string2:, Cruel 30
Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye, Cruel, Cruel World! string2:, Cruel 31
Errori Comuni Spazio insufficente char name[] = Ann ; strcpy(name, David ); name è 0x2000 A n n \0 0x2000 0x2003 32
Errori Comuni Spazio insufficente char name[] = Ann ; strcpy(name, David ); name è 0x2000 D a v i d \0 0x2000 0x2003 33
Errore tipico Spazio insufficente char name[5]; strcpy(name, David ); Non dimenticare il carattere \0 name è 0x3990 D a v i d \0 0x3990 0x3994 34
Errori Comuni Spazio insufficente char name[5]; strcpy(name, Ann ); strcat(name, Smith ); name è 0x2000 A n n \0 0x2000 0x2004 35
Errori Comuni Spazio insufficente char name[5]; Ma in pratica? Vediamo cosa succede.. strcpy(name, Ann ); strcat(name, Smith ); name è 0x2000 A n n S m i t h \0 0x2000 0x2004 36
Esempio: strassign.c #include <stdio.h> #include <string.h> #define MAXLENGTH 5 int main() { char name1[maxlength] = Ann ; char name2[] = Ann ; char *name3 = John ; char name4[maxlength]; } PRIMA name1=ann name2=ann name3=john printf( \nprima\nname1=%s\nname2=%s\nname3=%s, name1, name2, name3); strcpy(name1, Fred ); strcpy(name2, Fred ); strcpy(name4,name1); name3 = name2; printf( \ndopo\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); strcat(name1, Lee ); strcpy(name2, Jim ); printf( \ninfine\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); return 0; 37
Esempio: strassign.c #include <stdio.h> #include <string.h> #define MAXLENGTH 5 int main() { char name1[maxlength] = Ann ; char name2[] = Ann ; char *name3 = John ; char name4[maxlength]; } DOPO name1=fred name2=fred name3=fred name4=fred printf( \nprima\nname1=%s\nname2=%s\nname3=%s, name1, name2, name3); strcpy(name1, Fred ); strcpy(name2, Fred ); strcpy(name4,name1); name3 = name2; printf( \ndopo\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); strcat(name1, Lee ); strcpy(name2, Jim ); printf( \ninfine\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); return 0; 38
Esempio: strassign.c #include <stdio.h> #include <string.h> #define MAXLENGTH 5 int main() { char name1[maxlength] = Ann ; char name2[] = Ann ; char *name3 = John ; char name4[maxlength]; } INFINE name1=fred Lee name2=jim name3=jim name4=fred printf( \nprima\nname1=%s\nname2=%s\nname3=%s, name1, name2, name3); strcpy(name1, Fred ); strcpy(name2, Fred ); strcpy(name4,name1); name3 = name2; printf( \ndopo\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); strcat(name1, Lee ); strcpy(name2, Jim ); printf( \ninfine\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); return 0; 39
Confronto strcpy(string1, Apple ); strcpy(string2, Wax ); if (strcmp(string1, string2) < 0) { printf( %s %s\n, string1, string2); } else { printf( %s %s\n, string2, string1); } Restituisce La differenza tra i codici ASCII dei caratteri (presi a due a due) delle due stringhe nello stesso ordine in cui vengono scritte; alla prima differenza non nulla, ritornano tale valore 40
Confronto strcpy(string1, Apple ); strcpy(string2, Wax ); if (strcmp(string1, string2) < 0) { printf( %s %s\n, string1, string2); } else { printf( %s %s\n, string2, string1); } output: Apple Wax 41
Errore tipico Confronto errato strcpy(string1, Apple ); strcpy(string2, Wax ); if (string1 < string2) { printf( %s %s\n, string1, string2); } else { printf( %s %s\n, string2, string1); } 42
Lunghezza char string1[100]; strcpy(string1, Apple ); printf( %d\n, strlen(string1)); output: 5 43
Stringhe di caratteri come parametri Le stringhe come parametri formali sono dichiarate char* o char[] Esempi: void Greet ( char* name ) void Greet ( char name[] ) In tutto e per tutto sono vettori! 44
Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { } strcat(name, "! Come va?"); int main() { char user[namelen]; } printf( Chi sei? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; user è Jake\0 45
Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { } strcat(name, "! Come va?"); int main() { char user[namelen]; } printf("who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; name punta user è Jake\0 46
Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { } strcat(name, "! Come va?"); int main() { char user[namelen]; } printf("who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; name punta user è Jake! Come va?\0 47
Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { } strcat(name, "! Come va?"); int main() { char user[namelen]; printf("who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); } return 0; user è Jake! Come va?\0 48
Sommario Una stringa è un array continuo di caratteri L identificatore di stringa è l indirizzo stesso del primo carattere della stringa Ogni singolo carattere è individuato usando la notazione tipica ad array nome-stringa[indice] Esistono librerie C standard per copiare, concatenare e confrontare le stringhe 49
Deitel & Deitel Capitolo 8: 8.1 8.7 50
Stringhe di caratteri 10/08/06 1
CSE1301 Sem 2-2003 Sommario Rappresentazione Dichiarazione Indice di un carattere in una stringa Operazione su stringhe Errori comuni 10/08/06 2 Lecture 20: Character Strings 2
08/10/06 Rappresentazione Ricorda: In memoria le celle di un array sono contigue ogni cella ha un indirizzo 0x1FFE 0x1FFF 0x2000 0x2001 0x2002 etc 10/08/06 3
08/10/06 Rappresentazione Ricorda: Nella dichiarazione una variabile è un contenitore di un valore Esempio char ch; ch = B ; 0x1FFE 0x1FFF 0x2000 0x2001 0x2002 B 10/08/06 ch 4 etc
08/10/06 Rappresentazione Dichiarazione di una stringa individua un array di celle ogni cella contiene un char fornisce l indirizzo della prima cella Esempio char name[5]; Specifica il numero di celle dell array 10/08/06 5
08/10/06 Rappresentazione Dichiarazione di una stringa individua un array di celle ogni cella contiene un char fornisce l indirizzo della prima cella Esempio char name[5]; name è 0x2000 0x2000 0x2004 10/08/06 6
CSE1301 Sem 2-2003 Array e stringhe di caratteri Una stringa di caratteri è un array di char Una stringa di caratteri deve avere il carattere terminale ( \0 ) Il carattere terminale permette a scanf() e printf() di manipolare le stringhe efficacemente 10/08/06 7 Lecture 20: Character Strings 7
08/10/06 Stringhe di caratteri Dichiarazione char name[5]; Dichiarazione #define MAXLENGTH 5 char name[maxlength]; name è 0x2000 0x2000 0x2004 10/08/06 8
08/10/06 Input/Output di stringhe #include <stdio.h> #define MAXLENGTH 15 Non serve &, il nome stesso individua l indirizzo int main() { char string1[maxlength]; char string2[maxlength]; scanf("%s %s", string1, string2); printf("%s %s\n", string1, string2); } return 0; 10/08/06 9
08/10/06 Dichiarazione di stringhe Dichiarazione char name[5] = Ann ; Carattere terminale \0, segna il fine-stringa name è 0x2000 0x2000 A n n \0 0x2004 10/08/06 10
08/10/06 Dichiarazione di stringhe Dichiarazione Al più 4 lettere, l ultima deve essere \0 char name[5] = Ann ; name è 0x2000 A n n \0 0x2000 0x2004 10/08/06 11
08/10/06 Dichiarazione di stringhe Dichiarazione char name[] = Ann ; Usa una cella extra per \0 name è 0x2000 0x2000 A n n \0 0x2003 10/08/06 12
CSE1301 Sem 2-2003 Dichiarazione di stringhe Dichiarazione char *name = Ann ; Se si prova a modificare questa stringa, il risultato è segmentation fault 0x3000 name A n n \0 0x3000 0x3003 10/08/06 13 Lecture 20: Character Strings 13
08/10/06 Dichiarazione di stringhe Dichiarazione char name[]; Stringa di lunghezza arbitraria? No, errore! 10/08/06 14
08/10/06 Un carattere in una stringa La dimensione di una stringa di caratteri è fissata Per raggiungere il carattere alla posizione indice, l (indice+1)-esimo carattere: string[indice] Il primo carattere ha indice 0 10/08/06 15
08/10/06 Un carattere in una stringa 0x3995 0x399C name è 0x3995 J o h n \0 indice 0 indice 4 char name[8] = John ; int i = 2; printf( Il carattere in posizione %d è %c.\n, i, name[i]); output: Il carattere in posizione 2 è h. 10/08/06 16
08/10/06 Un carattere in una stringa 0x3995 0x399C name è 0x3995 J o hx n \0 indice 2 char name[8] = John ; name[2] = X ; printf( Nome: %s\n, name); 10/08/06 17
08/10/06 Un carattere in una stringa 0x3995 0x399C name è 0x3995 J o X n \0 indice 2 char name[8] = John ; name[2] = X ; printf( Nome: %s\n, name); output: Nome: JoXn 10/08/06 18
08/10/06 Operazioni con le stringhe #include <string.h> Assegnamento: strcpy() Concatenazione: strcat() Confronto: strcmp() Lunghezza: strlen() 10/08/06 19
08/10/06 Assegnamento #include <stdio.h> #include <string.h> #define MAXLENGTH 100 int main() { char string1[maxlength]; char string2[maxlength]; strcpy(string1, Hello World! ); strcpy(string2, string1); } return 0; string1: <spazzatura> string2: <spazzatura> 10/08/06 20
08/10/06 Assegnamento #include <stdio.h> #include <string.h> #define MAXLENGTH 100 int main() { char string1[maxlength]; char string2[maxlength]; strcpy(string1, Hello World! ); strcpy(string2, string1); } return 0; string1: Hello World! string2: <spazzatura> 10/08/06 21
08/10/06 Assegnamento #include <stdio.h> #include <string.h> #define MAXLENGTH 100 int main() { char string1[maxlength]; char string2[maxlength]; strcpy(string1, Hello World! ); strcpy(string2, string1); } return 0; string1: Hello World! string2: Hello World! 10/08/06 22
CSE1301 Sem 2-2003 Esempio char name1[5] = Ann ; char name2[5] = Dave ; name2 = name1; Errori Comuni Utilizzo del nome di stringa come Lvalue (variabile di tipo indirizzo) Errore! Richiesta una Lvalue-expression! - name2 contiene l indirizzo del primo valore dell array ma non è una variabile di tipo indirizzo 10/08/06 23 Lecture 20: Character Strings 23
CSE1301 Sem 2-2003 Esempio Errori Comuni Utilizzo del nome di stringa come Lvalue (variabile di tipo indirizzo) char name1[5] = Ann ; char name2[5] = Dave ; &(name2[0]) = name1; Errore! Richiesta una Lvalue-expression! - &(name2[0]) restituisce l indirizzo del primo valore dell array ma non è una variabile di tipo indirizzo 10/08/06 24 Lecture 20: Character Strings 24
08/10/06 Attenzione Assegnamento di indirizzo Esempio char *name1 = Ann ; char *name2 = Dave ; name2 = name1; 10/08/06 25
08/10/06 Attenzione Assegnamento di indirizzo char *name1 = Ann ; char *name2 = Dave ; 0x2000 name1 A n n \0 0x2000 0x2003 0x3990 name2 D a v e \0 0x3990 0x3994 10/08/06 26
08/10/06 Attenzione Assegnamento di indirizzo name2 = name1; 0x2000 name1 A n n \0 0x2000 0x2003 0x2000 name2 D a v e \0 0x3990 0x3994 10/08/06 27
08/10/06 Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye string2:, Cruel 10/08/06 28
08/10/06 Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye, Cruel string2:, Cruel 10/08/06 29
08/10/06 Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye, Cruel, Cruel string2:, Cruel 10/08/06 30
08/10/06 Concatenazione char string1[maxlength]; char string2[maxlength]; strcpy(string1, Goodbye ); strcpy(string2,, Cruel ); strcat(string1, string2); strcat(string1, string2); strcat(string1, World! ); string1: Goodbye, Cruel, Cruel World! string2:, Cruel 10/08/06 31
08/10/06 Errori Comuni Spazio insufficente char name[] = Ann ; strcpy(name, David ); name è 0x2000 A n n \0 0x2000 0x2003 10/08/06 32
08/10/06 Errori Comuni Spazio insufficente char name[] = Ann ; strcpy(name, David ); name è 0x2000 D a v i d \0 0x2000 0x2003 10/08/06 33
08/10/06 Errore tipico Spazio insufficente char name[5]; strcpy(name, David ); Non dimenticare il carattere \0 name è 0x3990 D a v i d \0 0x3990 0x3994 10/08/06 34
08/10/06 Errori Comuni Spazio insufficente char name[5]; strcpy(name, Ann ); strcat(name, Smith ); name è 0x2000 A n n \0 0x2000 0x2004 10/08/06 35
08/10/06 Errori Comuni Spazio insufficente char name[5]; Ma in pratica? Vediamo cosa succede.. strcpy(name, Ann ); strcat(name, Smith ); name è 0x2000 A n n S m i t h \0 0x2000 0x2004 10/08/06 36
CSE1301 Sem 2-2003 Esempio: strassign.c #include <stdio.h> #include <string.h> #define MAXLENGTH 5 int main() { char name1[maxlength] = Ann ; char name2[] = Ann ; char *name3 = John ; char name4[maxlength]; } PRIMA name1=ann name2=ann name3=john printf( \nprima\nname1=%s\nname2=%s\nname3=%s, name1, name2, name3); strcpy(name1, Fred ); strcpy(name2, Fred ); strcpy(name4,name1); name3 = name2; printf( \ndopo\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); strcat(name1, Lee ); strcpy(name2, Jim ); printf( \ninfine\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); return 0; 10/08/06 37 Lecture 20: Character Strings 37
CSE1301 Sem 2-2003 Esempio: strassign.c #include <stdio.h> #include <string.h> #define MAXLENGTH 5 int main() { char name1[maxlength] = Ann ; char name2[] = Ann ; char *name3 = John ; char name4[maxlength]; } DOPO name1=fred name2=fred name3=fred name4=fred printf( \nprima\nname1=%s\nname2=%s\nname3=%s, name1, name2, name3); strcpy(name1, Fred ); strcpy(name2, Fred ); strcpy(name4,name1); name3 = name2; printf( \ndopo\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); strcat(name1, Lee ); strcpy(name2, Jim ); printf( \ninfine\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); return 0; 10/08/06 38 Lecture 20: Character Strings 38
CSE1301 Sem 2-2003 Esempio: strassign.c #include <stdio.h> #include <string.h> #define MAXLENGTH 5 int main() { char name1[maxlength] = Ann ; char name2[] = Ann ; char *name3 = John ; char name4[maxlength]; } INFINE name1=fred Lee name2=jim name3=jim name4=fred printf( \nprima\nname1=%s\nname2=%s\nname3=%s, name1, name2, name3); strcpy(name1, Fred ); strcpy(name2, Fred ); strcpy(name4,name1); name3 = name2; printf( \ndopo\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); strcat(name1, Lee ); strcpy(name2, Jim ); printf( \ninfine\nname1=%s\nname2=%s\nname3=%s\nname4=%s, name1, name2, name3, name4); return 0; 10/08/06 39 Lecture 20: Character Strings 39
08/10/06 Confronto strcpy(string1, Apple ); strcpy(string2, Wax ); if (strcmp(string1, string2) < 0) { printf( %s %s\n, string1, string2); } else { printf( %s %s\n, string2, string1); } Restituisce La differenza tra i codici ASCII dei caratteri (presi a due a due) delle due stringhe nello stesso ordine in cui vengono scritte; alla prima differenza non nulla, ritornano tale valore 10/08/06 40
08/10/06 Confronto strcpy(string1, Apple ); strcpy(string2, Wax ); if (strcmp(string1, string2) < 0) { printf( %s %s\n, string1, string2); } else { printf( %s %s\n, string2, string1); } output: Apple Wax 10/08/06 41
08/10/06 Errore tipico Confronto errato strcpy(string1, Apple ); strcpy(string2, Wax ); if (string1 < string2) { printf( %s %s\n, string1, string2); } else { printf( %s %s\n, string2, string1); } 10/08/06 42
08/10/06 Lunghezza char string1[100]; strcpy(string1, Apple ); printf( %d\n, strlen(string1)); output: 5 10/08/06 43
CSE1301 Sem 2-2003 Stringhe di caratteri come parametri Le stringhe come parametri formali sono dichiarate char* o char[] Esempi: void Greet ( char* name ) void Greet ( char name[] ) In tutto e per tutto sono vettori! 10/08/06 44 Lecture 20: Character Strings 44
08/10/06 Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { strcat(name, "! Come va?"); } int main() { char user[namelen]; } printf( Chi sei? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; user è Jake\0 10/08/06 45
08/10/06 Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { strcat(name, "! Come va?"); } int main() { char user[namelen]; } printf("who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; name punta user è Jake\0 10/08/06 46
08/10/06 Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { strcat(name, "! Come va?"); } int main() { char user[namelen]; } printf("who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; name punta user è Jake! Come va?\0 10/08/06 47
08/10/06 Example: hello3.c #include <stdio.h> #include <string.h> #define NAMELEN 50 /* Stampa un saluto */ void Greet ( char * name ) { strcat(name, "! Come va?"); } int main() { char user[namelen]; } printf("who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; user è Jake! Come va?\0 10/08/06 48
08/10/06 Sommario Una stringa è un array continuo di caratteri L identificatore di stringa è l indirizzo stesso del primo carattere della stringa Ogni singolo carattere è individuato usando la notazione tipica ad array nome-stringa[indice] Esistono librerie C standard per copiare, concatenare e confrontare le stringhe 10/08/06 49
08/10/06 Deitel & Deitel Capitolo 8: 8.1 8.7 10/08/06 50