Innanzitutto ricordo, per chi non lo sapesse, che nel linguaggio C le stringhe sono implementate come vettori di caratteri char e che termininano tutte con il carattere � (ASCII 0), che indica appunto la fine della stringa.
La lunghezza della stringa è data dal numero dei suoi caratteri, escluso il � finale.

Premettendo che in C si dispone già di una funzione per determinare la lunghezza di una stringa, strlen() (che è contenuta nella libreria string.h), di seguito vi riporto un modo in cui si potrebbe implementare una funzione del genere.

Ecco il codice:

#include <stdio.h>

int strlen(const char *s)
{
	int i=0;
	while(s && *s++)
	{
		i++;
	}
	return i;
}

Viene innanzitutto inizializzato un contatore, che poi sarà ritornato dalla funzione e che quindi conterrà la lunghezza della stringa.
Questo contatore viene incrementato in un ciclo che gira fino a che ci sono caratteri.
Il compilatore valuta l’espressione *s++ in questo modo: prima viene determinato il valore di *s, con l’operatore di indirezione * (asterisco) si ottiene il valore puntato da s.
Quando il carattere è � il ciclo termina poichè � equivale a 0 e un espressione con questo valore significa “falso” in tutti i cicli e istruzioni di salto condizionale.
Dopo aver valutato *s, il compilatore incrementa il valore di s di una posizione (attraverso l’operatore ++).
Quindi l’espressione *s++ ha l’effetto di ritornare il valore del carattere corrente e di avanzare il puntatore di una posizione.
Il ciclo ha anche un altra condizione, che è legata alla prima da un operatore AND (&&), il ciclo prosegue cioè fino a quando s non vale NULL,
questo consente di evitare maulfunzionamenti nel caso in cui alla funzione vengano passati puntatori NULL (in questo caso quindi il ciclo neanche inizierebbe).

Per provare questa funzione, supponiamo di averla inserita all’interno di una libreria, chiamandola strlen.h e scriviamo il seguente programma:

#include <stdio.h>
#include "strlen.h"

int main()
{
	char x[50];
	printf("Inserisci una stringa: ");
	scanf("%s",&x);
	printf("Hai inserito una stringa lunga %d caratterin",strlen(x));
	system("pause");
}

Che non fa altro che richiedere l’inserimento di una stringa e calcolarne il numero di caratteri che contiene.

About OpenProgrammers

Programmatore per passione. Mi piace condividere qualsiasi idea o informazione utile, per questo motivo ho realizzato il blog.