• Stringhe: Introduzione nel Linguaggio C...

Stringhe: Introduzione nel Linguaggio C.

 

PREREQUISITI:

 

  • CONCETTO DI VARIABILE
  • COSTRUTTI CONDIZIONALI
  • COSTRUTTI ITERATIVI
  • ELEMENTI BASE DELLA PROGRAMMAZIONE FINO A VETTORI

 

Le stringhe sono una "Sequenza di caratteri alfanumerici",

 

RACCHIUSE TRA DOPPI APICI ("  ") e in questo caso si dicono

Stringhe costanti: "questa è una stringa costante"

 

 nel senso che sono immutabili

(non possiamo scorrerle come un vettore tramite un indice per prendere o modificare un certo carattere)

 

Oppure

 

 

CARATTERISTICHE STRINGHE:

 

int i = 5; //Mi permette di memorizzare un dato di TIPO int (intero)

char ch = 's' //Mi permette di memorizzare un dato di TIPO char (carattere)

 

Come dichiaro una Stringa? (sequenza di char)

 

String str = "Questa è una sequenza di caratteri Alfanumerici"  // NO!! String come TIPO non esiste in C!

 

char str[4] ={'c','a','s','a'};   // SI, assegnazione statica di un insieme di caratteri

str [0] = 'c';                   // ci pensa il compilatore

str [1] = 'a';

ect..                               

 

char  str[4] ="casa";        // SI, ma attenzione, assegnare un insieme di caratteri tutti in una volta (stringa costante)

        //  è come assegnarli staticamente a uno a uno

        // infatti ormai sappiamo che il nome di un vettore (qui, è str) è solo un alias

        // un soprannome per mascherare l'indirizzo in memoria

        // da cui inizia tutta la collezione di oggetti (grazie a cui quindi, possiamo fare RIFERIMENTO)

 

        // Pertanto non sarebbe possibile fare str[0] = "casa";

 

ATTENZIONE:

            Questo e' un esempio tecnicamente e teoricamente valido

            ma solo perché inizializziamo la stringa in modo statico!

            (cioè con le graffe, mettendo così tutti i valori non specificati fra di esse al valore nullo per quel dato tipo (cioè per un vettore di int, sarebbe 0) )

            Cioè nel caso di un vettore di char, il compilatore metterà un carattere speciale in tutte le celle non utilizzate.

 

INFATTI FINO ADESSO ABBIAMO TRASCURATO UN ASPETTO IMPORTANTE:

Come faccio a capire dove finisce una stringa? perché tutto può essere visto come un carattere..

si introduce un carattere speciale, detto Terminatore di stringa := '\0' o zero binario.     

 

Pertanto è necessario prevedere un carattere in più per avere una stringa

BEN FORMATTATA, ovvero, con un qualcosa che ci dice dove la stringa finisce.

 

Una stringa ben fatta ha in una delle sue posizioni l'elemento TERMINATORE DI STRINGA:= '\0'

 

 

Alla luce di ciò riscriviamo:

char str[5] ={'c','a','s','a'};   // SI, assegnazione statica di un insieme di caratteri

str [0] = 'c';                   // ci pensa il compilatore

….

str[4] = '\0';

 

Altro esempio:

char str[10] ={'c','a','s','a'};   // SI, assegnazione statica di un insieme di caratteri

str [0] = 'c';                     // ci pensa il compilatore

….

str [3] ='a';

str [4] = '\0';

str [5] ='\0';

 

str [9]='\0'; "casa\0\0\0\0\0\0"

 

 

Altra dichiarazione IMPORTANTE!!

 

char  str[5] ;                     // SI, vettore adibito a contenere caratteri

  //Perché come abbiamo anticipato esiste un TIPO PRIMITIVO stringa in C,

  //  -> valore immediatamente interpretabile dalla macchina    

        // come  una sequenza di caratteri alfanumerici..        

 // (come nel caso di un valore int [1,2,3,4,-6,-9} )

 

 // ma non esiste un riferimento a un'area di memoria predisposto come primitivo

// come la variabile int…

 // Quindi sfruttiamo una collezione di elementi (VETTORE o ARRAY)

 // tutti dello stesso tipo (CHAR, ovvero, carattere),

                                  // per avere un riferimento in memoria (portarcelo dietro)

                                 // ATTRAVERSO IL NOME DEL VETTORE (indirizzo cella di memoria iniziale, ovvero, indirizzo di str[0] )

 

                                //  introducendo però un ulteriore elemento rispetto a come siamo abituati a lavorare… lo zero binario. '\0')

 

 

CODICE DI ESEMPIO:

 

//   USER: UomoFocaccina

//   STAMPIAMO LE LETTERE DELL'ALFABETO

#include….

 

#define DIMFISICASTRINGA 11

int main (void)

{

char alfabeto[DIMFISICASTRINGA];  //dichiaro un vettore di tipo char di dimensione fisica 11 (cioè 11 posti possibili, da 0 a 10, dove                              

                                                                       //la posizione 10 dovrebbe essere riservata a '\0')

char ch = 'a';                                         // La Lettera a è trovata dal computer attraverso un numero intero (97) [decodifica binaria]

 

for (int i = 0; i < DIMFISICASTRINGA-1; i++)

{                                                                          //DIM-1 perché Mi tengo un posto per lo '\0'

           alfabeto[i] = ch++;                               //aumenta la decodifica di 1

           printf("%c ", alfabeto[i]);

       }

//dopo aver inizializzato la stringa con le lettere dell'alfabeto la devo ben formattare.

alfabeto[DIMFISICASTRINGA-1] = '\0';

 

printf("\n\n\n\n");

Return 0;

 

}

Grazie per la tua attenzione!

Ti è piaciuto? Condividilo
Usa il nostro Strumento di Ricerca Intelligente
© 2007 - 2024 Letuelezioni.it è un membro della famiglia GoStudent Mappa del sito: Insegnanti privati