Stringhe In linguaggio C Stringhe Un insieme di caratteri in sequenza forma una stringa. Alcuni linguaggi definiscono per le stringhe uno specifico tipo di dato e offrono metodi specifici per gestire valori di quel tipo. Il linguaggio C, tranne che in alcuni suoi dialetti, non fornisce un tipo di dato specifico per le stringhe che vengono trattate come array di caratteri. char nomeStudente[10]; Stringhe in C Esistono molti modi per gestire le stringhe in linguaggio C. Dichiarazione: char <identificatore>[<dimensione>]; Esempio di dichiarazione: char nomeStudente[20]; la stringa è in pratica un array di caratteri nomeStudente è l’identificatore della stringa 20 è la dimensione il numero di caratteri che la stringa può contenere è dato dalla dimensione – 1 (nell’esempio 19) un elemento è utilizzato per memorizzare il carattere terminatore di stringa: \0, conosciuto come il carattere null. Assegnamento Come per gli array non è possibile eseguire direttamente un assegnamento di un valore ad una stringa. Esempio: char nomeStudente[10]; // 19 caratteri + terminatore nomeStudente = "Rossi"; // Assegnamento errato La libreria string.h mette a disposizione funzioni per operare con le stringhe, in particolare strcpy permette di assegnare un valore ad una stringa char nomeStudente[10]; // 19 caratteri + terminatore strcpy(nomeStudente,"Rossi"); // Assegnamento corretto Visualizzazione E’ possibile la visualizzazione del contenuto di una stringa. Es. cout << "Il nome dello studente e': " << nomeStudente << endl; E’ possibile visualizzare ogni singolo carattere della stringa: Es. for (i=0; i<10; i++) cout << "Carattere " << i << " = " << nomeStudente[i] << endl; Input Mediante cin è possibile ricevere in input una stringa. Attenzione: non c'è controllo nè segnalazione di errore di superamento limite caratteri Esempio: cout << "Inserisci il nome dello studente "; cin >> nomeStudente; cout << "Il nome dello studente e': " << nomeStudente; Modifica di un carattere Come per gli array è possibile accedere ad ogni singolo elemento (ogni singolo carattere) della stringa. Il primo carattere ha indice 0 Attenzione al terminatore di stringa Esempio: nomeStudente[2]='K'; Stringhe e … caratteri Attenzione alla differenza tra apice e doppio apice: 'C' rappresenta un carattere "C" rappresenta una stringa (carattere + terminatore) Confronto fra stringhe La funzione strcmp(stringa1,stringa2) confronta stringa2 con stringa1, se sono uguali restituisce 0, se stringa1 è maggiore di stringa2 un valore positivo, altrimenti un valore negativo; Esempio: if (strcmp(nomeStudente,"Rossi")==0) cout << "Hai inserito il nome Rossi"; else if (strcmp(nomeStudente,"Rossi")>0) cout<<"Il nome inserito segue Rossi in ordine alfabetico"; else cout<<"Il nome inserito precede Rossi in ordine alfabetico"; Libreria string.h La libreria string.h rende disponibili molte funzioni standard per gestire le stringhe.: strcpy(stringa1, stringa2) copia stringa2 su stringa1; strncpy(stringa1, stringa2, n) copia i primi n caratteri di stringa2 in stringa1; strcat(stringa1, stringa2) concatena stringa2 a stringa1; strcmp(stringa1, stringa2) confronta stringa2 con stringa1, se sono uguali restituisce 0, se stringa1 è maggiore di stringa2 un valore positivo, altrimenti un valore negativo; intero = atoi(stringa) converte una stringa in un intero; reale = atof(stringa) converte una stringa in un valore in virgola mobile double; intero = strlen(stringa) conta il numero di caratteri di una stringa;