char în C++

Tipul pentru un singur caracter (un octet); în spate este un număr mic, codul caracterului.

Sintaxă
char c = 'A';

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 un char. 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 în std::string.
  • Presupui că char are semn. Pe unele platforme (ARM Linux) este fără semn; dacă îl folosești ca număr mic, scrie explicit signed char sau unsigned 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.