Come esempio finale nella nostra trattazione sulle stringhe, consideriamo il seguente programma che acquisisce una stringa e la converte tutta in caratteri minuscoli usando una funzione minuscolo:
#include <cstdlib>
#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
void minuscolo(char stringa[]);
int main(int argc, char *argv[])
{
char frase[255];
cout<<"Inserisci una frase da convertire tutta in minuscolo:\n";
cin.getline(frase,255);
minuscolo(frase);
cout<<"La frase convertita in minuscolo e'\n";
cout<<frase<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
void minuscolo(char stringa[])
{
int i;
for (i=0; stringa[i]!='\0';i++)
if (isalpha(stringa[i]))
stringa[i] = tolower(stringa[i]);
}
Osserviamo anzitutto il prototipo della funzione. Il nome della variabile seguito da parentesi quadre indica che si tratta di un vettore:
void minuscolo(char stringa[]);
Le parentesi quadre però non devono essere indicate nella chiamata alla funzione (vedi anche a questo proposito: passaggio di vettori a una funzione):
minuscolo(frase);
Notiamo ancora che la funzione minuscolo è di tipo void: infatti il passaggio di vettori a una funzione avviene sempre per argomento, cioè la funzione riceve il vettore originale (che può dunque modificare) e non una sua copia. Per questa ragione la funzione minuscolo non deve tornare nessun valore.
Consideriamo ora il ciclo all'interno della funzione:
for (i=0; stringa[i]!='\0';i++)
if (isalpha(stringa[i]))
stringa[i] = tolower(stringa[i]);
E' particolarmente significativa la condizione di prosecuzione del ciclo:
stringa[i]!='\0'
Questa condizione, sovente scritta in modo errato da generazioni di studenti (i quali spesso la trasformano in i != '\0', che è invece un errore) significa che il ciclo dev'essere proseguito finché non viene trovato il terminatore di stringa, cioè fino alla fine della stringa stessa.
precedente - successiva
Sito realizzato in base al template offerto da
http://www.graphixmania.it