Tipo Carattere in Object Pascal
- In Object Pascal, il tipo
Charrappresenta singoli caratteri Unicode a doppio byte. - I caratteri possono essere rappresentati in notazione simbolica (apici singoli) o numerica (preceduti da
#). - Le funzioni
ChreOrdpermettono di convertire tra caratteri e i loro code point Unicode. - Il tipo
Charè un tipo ordinale, consentendo l'uso di funzioni comeInceDec, e cicliforcon contatori di tipoChar. - Le operazioni comuni sul tipo
Charincludono funzioni comeIsLetter,IsDigit,IsWhiteSpace,ToUppereToLower.
Caratteri in Object Pascal
Le variabili carattere sono definite utilizzando il tipo Char.
Un'importante caratteristica del tipo Char è che rappresenta caratteri Unicode a doppio byte (rappresentati anche dal tipo WideChar). Le vecchie versioni di Delphi e Object Pascal utilizzavano il tipo AnsiChar per rappresentare caratteri a singolo byte, ma oggi si consiglia di utilizzare Char o WideChar per garantire la compatibilità con i caratteri Unicode.
Studieremo in dettaglio i caratteri in Unicode nelle lezioni sulle stringhe. Per ora, è sufficiente sapere che il tipo Char rappresenta un singolo carattere Unicode, che può essere una lettera, una cifra, un simbolo o un carattere di controllo.
Un carattere costante, o carattere letterale, può essere rappresentato in due modi:
-
con la notazione simbolica:
In altre parole, racchiudendo il carattere tra apici singoli, come ad esempio:
'a' 'b' '1' '#' '$' ' ' -
con la notazione numerica:
In questo caso, si utilizza il simbolo
#seguito dal numero intero che rappresenta il carattere. Ad esempio, il carattere 'N' può essere rappresentato come#78, poiché 78 è il code point Unicode per la lettera maiuscola 'N'.
La notazione numerica può anche essere espressa utilizzando la funzione di sistema Chr. La funzione Chr accetta un numero intero come argomento e restituisce il carattere corrispondente. Ad esempio, Chr(78) restituirà il carattere 'N'.
La conversione opposta può essere fatta con la funzione Ord. Questa funzione accetta un carattere come argomento e restituisce il suo valore numerico (code point Unicode). Ad esempio, Ord('N') restituirà 78.
Quando ci si riferisce a caratteri speciali, come i caratteri di controllo dello standard ASCII, si utilizzerà generalmente la notazione numerica.
La seguente lista include alcuni dei caratteri speciali più comunemente utilizzati:
#8backspace#9tab#10nuova riga#13carriage return#32spazio#27escape
Operazioni sul Tipo Carattere
Come altri tipi ordinali, il tipo Char ha diverse operazioni predefinite che si possono applicare a variabili di questo tipo.
Per poter utilizzare queste funzionalità è necessario abilitarle riferendosi all'unità Character in un'istruzione uses.
Le funzioni più comuni messe a disposizione per il tipo Char sono:
IsLetter: restituisce True se il carattere è una lettera (maiuscola o minuscola).IsDigit: restituisce True se il carattere è una cifra (0-9).IsWhiteSpace: restituisce True se il carattere è uno spazio bianco (spazio, tab, nuova riga, ecc.).ToUpper: converte il carattere in maiuscolo.ToLower: converte il carattere in minuscolo.
Proviamo queste funzioni in un semplice programma:
program EsempioChar;
uses
Character;
var
Ch: Char;
begin
Write('Inserisci un carattere: ');
ReadLn(Ch);
if IsLetter(Ch) then
WriteLn(Ch, ' è una lettera.')
else if IsDigit(Ch) then
WriteLn(Ch, ' è una cifra.')
else if IsWhiteSpace(Ch) then
WriteLn('Hai inserito uno spazio bianco.')
else
WriteLn(Ch, ' non è né una lettera né una cifra.');
WriteLn('Maiuscolo: ', ToUpper(Ch));
WriteLn('Minuscolo: ', ToLower(Ch));
end.
Un possibile output di questo programma potrebbe essere:
Inserisci un carattere: a
a è una lettera.
Maiuscolo: A
Minuscolo: a
Char come Tipo Ordinale
Il tipo di dati Char è un tipo ordinale, quindi si possono utilizzare le funzioni Inc e Dec su di esso (per ottenere il carattere successivo o precedente o spostarsi avanti di un numero dato di elementi, come abbiamo visto nella lezione sui tipi interi) e scrivere cicli for con un contatore Char.
Per chiarire questo concetto, consideriamo un programma di esempio in cui, partendo dal carattere A, si stampano tutti i caratteri maiuscoli dell'alfabeto:
program EsempioCharFor;
uses
Character;
var
Ch: Char;
begin
for Ch := 'A' to 'Z' do
Write(Ch, ' ');
WriteLn;
end.
Il risultato di questo programma sarà:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Studieremo in dettaglio il ciclo for nelle prossime lezioni sulle strutture di controllo.