PROGRAMMIAMO
C++ - Variabili char
Variabili di tipo char

Il tipo char (character) è usato per dichiarare variabili che possono contenere un singolo carattere (lettera, cifra numerica, simbolo). Per esempio:

char risposta, lettera;

I valori che è possibile assegnare ad una variabile char sono ovviamente di tipo carattere e vanno indicati fra singoli apici, così:

lettera = 'P';

L'uso delle variabili char è piuttosto limitato. Tipicamente servono quando occorre acquisire una risposta ('s' o 'n'), come nel seguente caso:

char risposta;

while (1)
{

...

cout<<"Vuoi terminare il ciclo (s/n)? ";
cin>>risposta;

if (risposta=='s')
break;

}

 

Codice ASCII dei caratteri alfanumerici

In realtà il C rappresenta i caratteri mediante un codice numerico detto codice ASCII (American Standard Code for Information Interchange), il quale fa corrispondere ad ogni carattere un valore numerico intero compreso fra 0 e 127.

Per esempio il codice ASCII della lettera 'A' (maiuscola) è 65, quello della 'B' è 66 e così via. Si noti che il codice ASCII delle minuscole è diverso. Infatti la 'a' (minuscola) corrisponde a 97, la 'b' a 98 etc.

Data la corrispondenza fra valori numerici e caratteri il seguente spezzone di programma visualizza sullo schermo la lettera 'B':

char let;
let = 66;
cout<<let;

Si osservi che è possibile assegnare a una variabile char un numero (intero) e che la cout visualizza il carattere corrispondente al codice ASCII assegnato. Volendo visualizzare invece del carattere il codice contenuto in una variabile char occorre fare così:

char let;
let = 66;
cout<<(int) let;

L'operatore (int) si dice cast e serve per forzare il C a convertire in intero il tipo della variabile. In questo modo la cout visualizza il numero 66.

E' possibile sfruttare la corrispondenza che esiste fra caratteri e codici ASCII per manipolare il contenuto delle variabili char. Per esempio il seguente programma converte tutte le lettere minuscole in maiuscole, sottraendo al codice ASCII di ogni lettera il valore 32 (in questo modo la 'a', codice ASCII 97, diventa 'A', codice ASCII 65 e così via):

char let;

while (1)
{
cout<<"Fornisci una lettera (per terminare il ciclo fornisci '!') ";
cin>>let;

if (let == '!')
break;

if (let>='a' && let<='z')
let = let - 32;

cout<<"La lettera convertita e': "<<let<<"\n";
}

Si osservi il confronto let>='a' && let<='z' che permette di stabilire se la lettera acquisita è minuscola (compresa fra 'a' e 'z') ed evita in tale modo di applicare la conversione a simboli non alfabetici o alle lettere che già sono maiuscole.

Una cosa che porta un po' di confusione a chi impara per la prima volta a usare le variabili char è il fatto che anche le cifre numeriche da '0' a '9' hanno un codice ASCII corrispondente e che tale codice però non è uguale al valore numerico della cifra. Per esempio il codice di '0' è 48, quello di '1' è 49 e così via.

Anche il blank (lo spazio vuoto) è un carattere e il suo codice ASCII è 32.

 

Caratteri non stampabili e sequenze di escape

Vi sono anche alcuni caratteri non stampabili o di controllo, che, pur avendo un codice ASCII, non corrispondono a nessun simboli visualizzabile sullo schermo. Possiamo citare per esempio il codice 10 che corrisponde al line feed (andata a capo, simbolo in C '\n') e il codice 7 che corrisponde a un sono beep.

E' interessante osservare che molti caratteri non stampabili possono essere rappresentati in un programma per mezzo delle cosiddette sequenze di escape. In pratica si tratta di simboli speciali preceduti dal carattere \ (backslash). Le sequenze di escape sono:


Carattere Codice ASCII Sequenza di escape
Newline 10 \n
Tabulazione orizzontale 9 \t
Tabulazione verticale 11 \v
Backspace (tasto indietro) 8 \b
Carriage return 13 \r
Formfeed 12 \f
Alert (beep) 7 \a
Backslash 92 \\
Singolo apice 39 \'
Doppio apice 34 \"
Null 0 \0

Alcune sequenze di escape sono già state usate. In particolare '\n' è stata sempre utilizzata per indicare un'andata a capo al termine di una visualizzazione (es. in una cout). Un'altra semplice sequenza di escape (\t) serve per inserire una tabulazione orizzontale in un testo, cioè per spostare verso destra una parte della visualizzazione. Esempio:

cout<<"Uno\tDue\tTre\n"

Viene visualizzato così:

Uno     Due     Tre

Alcune sequenze di escape si riferiscono in realtà a caratteri stampabili, ma il cui inserimento può dare dei problemi. Per esempio, dato che il simbolo del backslash (\) è usato per introdurre una sequenza di escape, quando si vuole visualizzarlo occorre usare il doppio backslash (\\). Esempio:

cout<<"Il simbolo \\ deve essere scritto due volte per essere visualizzato\n"

Viene visualizzato così:

Il simbolo \ deve essere scritto due volte per essere visualizzato

 

Funzioni di library per i caratteri

Il C contiene alcune funzioni di library (già comprese nell'ambiente di programmazione) per la manipolazione di caratteri. Per usarle in un programma bisogna scrivere #include <ctype.h> in testa al file.

Le funzioni per i char sono le seguenti:

Come esempio di uso delle funzioni di library per i caratteri, si consideri la seguente versione del programma per convertire un carattere minuscolo nel corrispondente maiuscolo:

#include <cstdlib>
#include <iostream>
#include <ctype.h>

using namespace std;

int main(int argc, char *argv[])
{
char let,let2;

while (1)
{
cout<<"Fornisci una lettera (per terminare il ciclo fornisci '!') ";
cin>>let;

if (let == '!')
break;

if (islower(let))
let2 = toupper(let);
else
let2 = let;

cout<<"La lettera convertita e': "<<let2<<"\n";
}

system("PAUSE");
return EXIT_SUCCESS;
}

 

 

successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it