Programmazione – Lezione 8 – Operiamo con le stringhe

stringhe

Il C, a differenza di altri linguaggi di programmazione, non gestisce le stringhe di testo in modo diretto, ma tramite array di caratteri.

Supponiamo che vogliamo memorizzare in una variabile la parola “Ciao”. Il C memorizzerà questo testo in un array 5 caratteri. Perché 5 se contiamo solo 4 caratteri ? Perché una stringa deve sempre terminare con il carattere null, o chiamato anche terminatore di stringa.

char parola[] = "Ciao"; // in realtà il testo memorizzato sarà "Ciao\0"

Questa istruzione alloca uno spazio di 5 caratteri e memorizza la stringa nell’array parola[]. Il carattere terminatore indicherà al compilatore quando finisce il testo da memorizzare.

Ecco subito un esempio pratico:

char parola1[] = "Hello";
char parola2[] = "World";

printf("%s %s",parola1,parola2); // al posto di ogni %s verrà inserita la stringa

Proviamo nel nostro compilatore online:

compilatore stringa

.
Conversione stringhe in numeri e viceversa

Durante la stesura di un programma, capita molto spesso la necessità di convertire stringhe in numeri e viceversa.
Ricordo che la stringa di testo “1” è ben diversa dal numero 1. Con i numeri possiamo fare operazioni algebriche, con le stringhe no.
L’istruzione C per convertire una stringa in numero è atoi, ma anche atof. Mentre la la prima restituisce un numero intero, la seconda di un numero di tipo double.

Vediamo subito come si usa:

int a = 0;
a = atoi("12"); //converte la stringa di testo 12 nel numero intero 12

compilatore atoi

Per il viceversa, ovvero convertire un numero in stringa, dobbiamo ricorrere all’istruzione sprintf().
Vediamo come si usa:

int a = 38;
char str[15]; //riservo all'array stringa str uno spazio di 15 caratteri
sprintf(str, "%d", a); //converto il numero 38, contenuto nella variabile a, nella stringa "38" e lo riverso in str[]
 
printf("%s",str); //stampo il contenuto della stringa str

compilatore numero a stringa

Codice ascii del carattere

Come già detto, il computer lavora soltanto con numeri binari. I disegni che vediamo a monitor, le canzoni che ascoltiamo, i film che guardiamo al computer, le pagine di un sito internet, per la CPU non sono altro che una sequenza di numeri binari. Lo stesso dicasi per i caratteri di testo.
Ogni carattere della tastiera, prima di essere elaborato dalla CPU, viene sempre convertito nel corrispettivo codice numerico chiamato anche ASCII. Per esempio al carattere “a” corrisponde il codice ascii decimale 97 e in binario sarebbe 1100001.
In C come possiamo ottenere il codice deciamle ascii di un carattere ?

Ecco come fare:

char prova[] = "a"; // creo un array prova per contentenere il carattere "a"
int codice = 0; //creo una variabile intera che conterrà il codice decimale ascii di "a"
 
codice = int(prova[0]); //con questa funzione converto il primo carattere dell'array prova, che è "a", nel suo codice ascii
 
printf("%d",codice);

compilatore stringa a ascii

Per fare il contrario, ovvero dal codice ascii ottenere il carattere corrispondente, dovremo fare così:

int a = 97; //assegniamo alla variabile a il codice ascii 97
char c = a; //convertiamo il codice ascii nel suo corrispettivo carattere
printf("%c", c);

Infatti

compilatore ascii a stringa

 

Per ultima cosa vorrei parlarvi dell’istruzione strlen(), questa vi permette di ottenere la lunghezza di una stringa, ovvero il numero di caratteri da cui è composta.
Devo ricordarvi di inserire nel vostro codice sorgente, prima della sequenza principale MAIN, la libreria string.h

#include <iostream>
#include <string.h>

using namespace std;

int main()
{

 char a[]="prova";
 int b = 0;
 
 b = strlen(a); //calcola di quanti caratteri è composta la stringa nell'array a[] e pone il risultato in b
 
 printf("%d",b);
}

compilatore strlen

L’argomento è sicuramente molto più vasto e vi esorto ad approfondire se la cosa vi incuriosisce, quello che vi ho accennato in questo articolo viene usato spesso in programmazione.

Per oggi penso sia abbastanza, vi aspetto al prossimo articolo Smile-Ammicca

Se ti è piaciuto l'articolo e apprezzi il mio lavoro potresti aiutarmi con una piccola donazione, tramite PayPal, offrendomi un cappuccino.
Grazie di cuore!
Dona