Codurile ASCII
ASCII (prescurtare de la American Standard Code for Information Interchange) este o codificare standard prin care fiecărui caracter îi corespunde un număr întreg, astfel încât calculatorul să îl poată memora și prelucra.
În C++, un caracter de tip char este memorat de fapt ca un număr: codul său ASCII. De aici vine o proprietate foarte utilă: putem compara și transforma caractere folosind operații aritmetice obișnuite, la fel cum lucrăm cu numere. Tabelele de mai jos adună codurile pe care le întâlnim cel mai des atunci când prelucrăm șiruri de caractere.
Cifrele
Cifrele de la '0' la '9' au coduri ASCII consecutive, cuprinse între 48 și 57.
| Cifră | Cod ASCII | Cifră | Cod ASCII |
|---|---|---|---|
| 0 | 48 | 5 | 53 |
| 1 | 49 | 6 | 54 |
| 2 | 50 | 7 | 55 |
| 3 | 51 | 8 | 56 |
| 4 | 52 | 9 | 57 |
Fiindcă sunt consecutive, putem verifica dacă un caracter c conține o cifră comparându-l direct cu '0' și '9':
c >= '0' && c <= '9' // echivalent cu:
c >= 48 && c <= 57 // adevarat doar daca in c avem o cifra
Scăzând '0' dintr-un caracter cifră obținem chiar valoarea ei numerică, iar adunând-o la loc facem transformarea inversă:
char c = '7';
int cifra = c - '0'; // cifra devine 7 (valoarea numerica)
char inapoi = cifra + '0'; // inapoi devine din nou '7'
Literele mari și mici
Literele mari ocupă codurile de la 65 la 90, iar literele mici de la 97 la 122. Fiecare literă mare și corespondenta ei mică sunt așezate în aceeași ordine alfabetică.
| Literă mare | Cod | Literă mică | Cod |
|---|---|---|---|
| A | 65 | a | 97 |
| B | 66 | b | 98 |
| C | 67 | c | 99 |
| D | 68 | d | 100 |
| E | 69 | e | 101 |
| F | 70 | f | 102 |
| G | 71 | g | 103 |
| H | 72 | h | 104 |
| I | 73 | i | 105 |
| J | 74 | j | 106 |
| K | 75 | k | 107 |
| L | 76 | l | 108 |
| M | 77 | m | 109 |
| N | 78 | n | 110 |
| O | 79 | o | 111 |
| P | 80 | p | 112 |
| Q | 81 | q | 113 |
| R | 82 | r | 114 |
| S | 83 | s | 115 |
| T | 84 | t | 116 |
| U | 85 | u | 117 |
| V | 86 | v | 118 |
| W | 87 | w | 119 |
| X | 88 | x | 120 |
| Y | 89 | y | 121 |
| Z | 90 | z | 122 |
Diferența dintre codul unei litere mari și al corespondentei mici este mereu 32. De aceea putem trece de la o formă la alta printr-o simplă adunare sau scădere:
char mare = 'A';
char mic = mare + 32; // 'a'
char dinNouMare = mic - 32; // 'A'
Simboluri și semne de punctuație
Dincolo de cifre și litere, tot din codul ASCII fac parte spațiul, semnele de punctuație și simbolurile folosite pentru operatori. Iată codurile celor mai des întâlnite:
| Cod | Simbol | Descriere |
|---|---|---|
| 32 | (spațiu) | spațiu |
| 33 | ! | semnul exclamării |
| 34 | " | ghilimele |
| 35 | # | diez |
| 37 | % | procent (modulo) |
| 38 | & | ampersand |
| 39 | ' | apostrof |
| 40 | ( | paranteză rotundă deschisă |
| 41 | ) | paranteză rotundă închisă |
| 42 | * | asterisc (înmulțire) |
| 43 | + | plus |
| 44 | , | virgulă |
| 45 | - | minus (cratimă) |
| 46 | . | punct |
| 47 | / | slash (împărțire) |
| 58 | : | două puncte |
| 59 | ; | punct și virgulă |
| 60 | < | mai mic |
| 61 | = | egal |
| 62 | > | mai mare |
| 63 | ? | semnul întrebării |
Caractere speciale
Nu toate codurile corespund unor simboluri vizibile. Primele coduri (de la 0 la 31) sunt caractere de control, folosite pentru comenzi, nu pentru afișare. Trei dintre ele apar des în probleme:
| Cod | Caracter | Rol |
|---|---|---|
| 0 | '\0' | caracterul nul, marca de sfârșit a unui șir de caractere |
| 10 | '\n' | rând nou (trecerea pe linia următoare) |
| 32 | (spațiu) | spațiul obișnuit dintre cuvinte |
Codurile de peste 127 formează așa-numitul ASCII extins, care conține litere cu diacritice și alte simboluri. Acestea nu sunt însă standard: pot diferi de la un sistem la altul, așa că în problemele de Bacalaureat ne bazăm doar pe codurile de la 0 la 127.