Introduzione alle Stringhe nel linguaggio C

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

UN VETTORE DI CHAR : char str [5];

Letteralmente, una sequenza di caratteri contigua in memoria

(possiamo scorrerle tramite un indice per prendere un certo carattere, e modificare volendo il contenuto della cella di memoria).

Specifichiamo che con il termine "prendere", intendiamo

Accedere alla cella di memoria del vettore e assegnare quel carattere (char) a qualcosa di compatibile (di tipo char)

Mentre con il termine “modificare” si intende:

Accedere alla cella di memoria del vettore e assegnargli un altro carattere (char).   

Prima di proseguire specifichiamo che non facciamo riferimenti ESPLICITI a puntatori e alle dirette conseguenze (il nome di un vettore, è implicitamente e detto con un certo abuso di notazione, un puntatore).           

ATTENZIONE:

Questo è 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) ).

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

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 dica dove la stringa finisca.

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

Altra dichiarazione IMPORTANTE!!

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

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

// che è un valore immediatamente interpretabile dalla macchina    

Per esempio 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 per 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')

/* Adesso INVERTIAMO LE LETTERE DELL'ALFABETO:   Compilatore C99 (ANSI_C), Per compilatore C89 ect invia una mail*/

#include <stdio.h>

#define   DIM 20

int main(void)

{

char stringa[DIM+1]; //20 ELEMENTI + TERMINATORE STRINGA

char ch='a';

for(int i=0;i<DIM;i++)

{   

     stringa[i]= ch++;

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

}

stringa[DIM]='\0';

printf("\n");

//dopo aver inizializzato la stringa la devo ben formattare

char stringaInvertita[DIM+1];

int j=0;

for(int i=DIM-1;i>=0;i--)         //ci sono modi equivalenti più intuitivi

{                                            // si è scelto di proporre questo ragionamento.

            stringaInvertita[j] = stringa[i] ;

            printf("%c ", stringaInvertita[j] );

            j++;  

}

stringaInvertita[DIM]='\0';

printf("\n");

return 0;

}

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