Ce face char
Un char ține un singur caracter scris între apostrofuri: 'A', '7', '?'. Ocupă exact 1 octet și este de fapt un număr: codul ASCII al caracterului ('A' este 65). De aceea poți face calcule cu el: 'A' + 1 este 'B'.
Textul între ghilimele duble ("Ana") este un șir de char-uri, nu un singur char. Pentru text folosește std::string.
Literele românești (ă, â, î, ș, ț) nu încap într-un singur char: în UTF-8 fiecare ocupă 2 octeți, deci 2 char-uri într-un std::string.
Exemple
Exemplul 1: Caracterul și codul lui
Ca să vezi codul numeric, transformă caracterul în int. Diferența dintre o cifră scrisă ca text și valoarea ei este '0'.
#include <print>
int main() {
char litera = 'A';
std::println("{} are codul {}", litera, static_cast<int>(litera));
char urmatoarea = litera + 1;
std::println("După {} vine {}", litera, urmatoarea);
char cifra = '7';
std::println("Valoarea cifrei: {}", cifra - '0');
}
Rezultat
A are codul 65
După A vine B
Valoarea cifrei: 7
Exemplul 2: Alfabetul cu o buclă
#include <print>
int main() {
for (char c = 'a'; c <= 'j'; ++c) {
std::print("{} ", c);
}
std::println("");
}
Rezultat
a b c d e f g h i j
Exemplul 3: Diacriticele ocupă doi octeți
„Iași” are 4 litere, dar 5 octeți: „ș” ocupă 2 în UTF-8. size() numără octeții (char-urile), nu literele.
#include <print>
#include <string>
int main() {
std::string oras = "Iași";
std::println("{} are {} char-uri", oras, oras.size());
std::string simplu = "Cluj";
std::println("{} are {} char-uri", simplu, simplu.size());
}
Rezultat
Iași are 5 char-uri
Cluj are 4 char-uri
Greșeli frecvente
- Scrii
char c = "A";cu ghilimele duble."A"este un șir (două caractere: A și terminatorul\0), nu unchar. Folosește apostrofuri:'A'. - Pui o literă românească într-un
char:char c = 'ș';. Nu încape într-un octet; compilatorul dă eroare sau avertisment. Păstrează textul cu diacritice înstd::string. - Presupui că
charare semn. Pe unele platforme (ARM Linux) este fără semn; dacă îl folosești ca număr mic, scrie explicitsigned charsauunsigned char.
Comenzi înrudite
wchar_t, char8_t, char16_t, char32_t: Tipuri de caractere pentru Unicode: char8_t (UTF-8), char16_t (UTF-16), char32_t (UTF-32) și wchar_t, caracterul „lat” dependent de sistem.int: Tipul de bază pentru numere întregi (fără zecimale), de obicei pe 4 octeți, cu valori între aproximativ -2,1 și 2,1 miliarde.signed, unsigned, short, long: Modificatori care schimbă mărimea (short, long) sau semnul (signed, unsigned) tipurilor întregi.sizeof: Dă numărul de octeți ocupați în memorie de un tip sau de o variabilă; se calculează la compilare.std::string: Șir de caractere care își gestionează singur memoria; atenție, lucrează cu octeți, nu cu litere.