Stringhe Una stringa è un vettore di char con un carattere costante \0 che indica la fine della stringa il terminatore rende differenti gli array di char e le stringhe!!! le funzioni per la manipolazione delle stringhe falliscono se applicate a vettori di char senza il terminatore (accedono oltre la memoria allocata...) una stringa costante viene definita da una sequenza di caratteri tra doppi apici “Questa e’ una stringa costante” nel caso delle stringhe costanti, non è necessario indicare \0 (viene automaticamente assegnato)
Stringhe char message[] = “Corso di C++”; equivale a alternativamente char message[80] = “Corso di C++”;
Stringhe La stringa deve essere inizializzata con la massima lunghezza che verrà utilizzata Non si possono fare assegnazioni del tipo message = “Altro Corso”; in quanto message è un lvalue non modificabile coincidente con l’indirizzo base del vettore di char! modificando il vettore bisogna ricordarsi il terminatore
Stringhe char message[] = “Corso di C++”; cout << message << “\n”; // stampa “Corso di C++” message[0]=‘C’; message[1]=‘I’; message[2]=‘A’; message[3]=‘O’; cout << message << “\n”; // stampa “CIAO di C++” message[4]=‘\0’; cout << message << “\n”; // stampa “CIAO”
Stringhe le funzioni per la manipolazione delle stringhe sono prototipate in <string.h> char * strcpy(char *string1, const char *string2); copia una stringa (compreso il terminatore) da string 2 a string1, restituendo anche l’indirizzo della stringa di destinazione (string1)
Stringhe #include <string.h> char message[80]; strcpy(message,”Corso di C++”); cout << message << “\n”; strcpy(message,”CIAO”); strcat(message, “\nFine del messaggio\n”); cout << message;
Stringhe Attenzione a come si occupa la memoria!!!!! //forma 1 char *pt; pt = “Corso di C++”; //forma 2 char *pt = “Corso di C++”; //forma 3 char pt[] = “Corso di C++”;
Stringhe Nel primo caso viene prima dichiarato il puntatore e poi allocata memoria per contenere la costante “Corso di C++” e viene indirizzato il puntatore Nel secondo caso viene dichiarato il puntatore e allocata la memoria contemporaneamente Nel terzo caso, viene inizializzato un vettore di lunghezza sufficiente a contenere la stringa indicata, che poi può essere anche modificata
Stringhe Attenzione a char *string1; char *string2; string1 = “Corso di C++”; string2= “C++”; il compilatore potrebbe far puntare string2 ad un indirizzo della memoria puntata da string1
Esempi di manipolazione di stringhe: strcpy strcpy(char* s, char* t) { while((*s = *t) != ‘\0’) s++; t++; }
Esempi di manipolazione di stringhe: strcmp strcmp(char s[], char t[]) { int i; i = 0; while(s[i] == t[i]) if(s[i++] == ‘\0’) return 0; return s[i]-t[i]; }
Esempi di manipolazione di stringhe: strcmp strcmp(char* s, char* t) { for( ; *s = = *t; s++,t++;) if(*s = = ‘\0’) return 0; } return *s - *t;