De ce contează?
Gândește-te la o tastatură veche de telefon, unde fiecare tastă are scris un număr dedesubt. Tu vezi litera „A", dar mecanismul dinăuntru nu lucrează cu litere — lucrează cu numărul tastei. La fel face și calculatorul: în spatele fiecărui caracter de pe ecran stă, de fapt, un număr. Tipul char este exact acel sertăraș care ține un singur caracter, păstrând în secret numărul lui.
Ce este
Tipul char păstrează un singur caracter: o literă ('A'), o cifră scrisă ca simbol ('7'), un semn ('+') sau un spațiu (' '). Caracterul se scrie mereu între ghilimele simple: 'A', nu "A".
Secretul important: calculatorul nu știe ce e o „literă". El știe doar numere. De aceea fiecărui caracter i s-a atribuit, prin convenție, un cod numeric — codul ASCII. Litera 'A' este de fapt numărul 65, litera 'a' este 97, iar cifra-simbol '0' este 48.
Asta înseamnă că un char este, în adâncul lui, un număr întreg mic (ocupă 1 octet, valori între 0 și 255). Când scrii 'A' în program, calculatorul memorează 65. Când afișezi acel char, el traduce 65 înapoi în simbolul A pe ecran.
Pentru că un char ESTE un număr, poți face aritmetică cu el. 'A' + 1 dă 66, adică exact codul lui 'B'. Deci 'A' + 1 ajunge la litera următoare din alfabet. Aici stă tot declicul lecției: caracterele sunt numere ordonate, una după alta.
Cum arată
Hai să vedem ce număr stă în spatele câtorva caractere. În rândul de sus sunt caracterele așa cum le vezi tu; dedesubt, codul ASCII pe care îl ține de fapt calculatorul.
65 | 66 | 67 | 97 | 98 | 48 | 49 |
A | B | C | a | b | 0 | 1 |
Două tipare ies imediat în evidență, și amândouă îți vor fi de folos:
- Literele sunt consecutive.
'A'=65,'B'=66,'C'=67… La fel'a'=97,'b'=98… Deci'c' - 'a'dă2— adică „c este a treia literă, pe poziția 2 dacă numeri de la 0". Așa transformi o literă într-un indice 0–25. - Litera mică și cea mare diferă cu 32.
'a'(97) −'A'(65) = 32. Ca să faci o literă mare devină mică, îi aduni 32; invers, îi scazi 32.
Și cifrele ascund un truc valoros. Caracterul '7' NU are valoarea 7 — el are codul ASCII 55. Dar cifrele sunt și ele consecutive ('0'=48, '1'=49, …), așa că '7' - '0' = 55 − 48 = 7. Astfel scazi '0' ca să afli valoarea numerică reală a unei cifre citite ca simbol.
Implementare C++
#include <iostream>
using namespace std;
int main() {
char litera = 'A';
// un char e un numar: afisat ca text da litera, fortat la int da codul
cout << litera << endl; // A
cout << (int)litera << endl; // 65
// aritmetica pe caractere: litera urmatoare din alfabet
char urmatoarea = litera + 1;
cout << urmatoarea << endl; // B (pentru ca 65 + 1 = 66)
// litera mare -> litera mica: adaugam 32
char mica = 'A' + 32;
cout << mica << endl; // a
// cifra-simbol -> valoarea ei numerica: scadem '0'
char cifra = '7';
int valoare = cifra - '0';
cout << valoare << endl; // 7 (pentru ca 55 - 48 = 7)
// litera -> indice 0..25 in alfabet: scadem 'a'
char c = 'c';
int indice = c - 'a';
cout << indice << endl; // 2 (a=0, b=1, c=2)
return 0;
}Poți citi un char direct de la tastatură cu cin, ca pe orice altă variabilă:
char ch;
cin >> ch; // daca tastezi Q , ch devine 'Q' (codul 81)
cout << ch << " are codul " << (int)ch << endl; // Q are codul 81Iar un șir de caractere (string) nu e nimic mai mult decât o succesiune de char așezate unul după altul. Cuvântul "Da" este, în spate, caracterul 'D' urmat de 'a' — adică numerele 68 și 97, unul lângă altul.
Greșeala clasică: confunzi cifra-simbol cu valoarea ei. Dacă citești caracterul '7' și scrii int x = '7';, obții 55 (codul ASCII), nu 7. Mulți se miră de ce calculele „o iau razna". Regula de aur: când vrei valoarea numerică a unei cifre citite ca char, scazi '0' — '7' - '0' dă 7. Și nu uita: caracterele se scriu cu ghilimele simple ('A'), iar șirurile cu ghilimele duble ("A") — sunt lucruri diferite.