Link sponsorizzati

Gestione delle stringhe in C++

Articolo scritto da Stefano Cancedda
Pagina 1 di 3

Rappresentazione dei caratteri

Il problema della codifica dei caratteri è complesso, sebbene appaia banale; lingue diverse hanno esigenze diverse, in alcune lingue il concetto di "carattere" non esiste neanche.

(L'articolo continua più sotto...)

Concettualmente si associa sempre una codifica numerica ad ogni carattere. Una stringa è una sequenza di numeri che rappresentano in successione i caratteri.
La parte di maggiore complessità è il modo con cui l'associazione viene fatta. Le rappresentazioni più comuni sono ASCII e UNICODE.

ASCII prevede un byte per carattere, definisce il significato dei primi 128 simboli comuni a tutte le lingue, ed è estendibile, assegnando così un significato anche agli altri 128 simboli. Lingue diverse usano estensioni diverse.
UNICODE è un sistema di rappresentazione che assegna un numero univoco ad ogni carattere indipendentemente dalla lingua. Gli alfabeti mappati in unicode sono tutti quelli moderni e parte di quelli antichi.
Ogni simbolo occupa uno spazio variabile, al massimo 21 bit, dei quali i primi cinque definiscono il piano, i restanti il carattere vero e proprio.
Il piano 0 (Basic Multilingual Plane) copre le lingue più usate.
I codici numerici sono serializzati tramite diversi schemi di ricodifica, i quali assegnano codici più brevi ai simboli più frequenti, in modo da minimizzare le dimensioni del testo.

  • UTF-8: da 1 a 4 elementi lunghi 1 byte
  • UTF-16: sequenza di 1 o 2 interi di 16 bit (è la più usata)
  • UTF-32: un unico intero di 32 bit (dword)
Tipi di carattere in C++

C++ può gestire sia tipi codificati ASCII che tipi UNICODE.
Il tipo char, esattamente come nel C, rappresenta ogni carattere su 8 bit, generalmente in codifica ASCII.
WCHAR contiene un carattere Unicode 16-bit.
E' disponibile anche una definizione condizionale all'interno dell'header standard tchar.h. Il carattere generico è identificato dal tipo _TCHAR ed il suo tipo reale dipende dalla definizione del simbolo _UNICODE.

Compatibilmente con questo sistema sono ridefinite tutte le funzioni della standard library del C con sintassi analoga ma con la triplice tipologia di trattazione di caratteri.
Per quanto riguarda ASCII restano valide le vecchie funzioni (printf, scanf).
Le funzioni UNICODE sono identificate dal prefisso w (wprintf, wscanf).
Esistono anche le varianti generiche dipendenti dal simbolo _UNICODE contrassegnate dal prefisso _t (_tprintf, _tscanf).

Definizione delle stringhe in C++

Restano sempre valide le dichiarazioni C-style degli array di caratteri.

char  stringa_ascii[20];
wchar stringa_utf16[20];
Oltre questo sono stati introdotti direttamente i tipi a più alto livello string e wstring.
string  stringa_ascii;
wstring stringa_utf16;
Per quanto riguarda i tipi generici è disponibile anche una definizione per le stringhe immutabili.
LPTSTR stringa_generica;
LPCTSTR stringa_immutabile;
Le stringhe costanti sono definite con la sintassi seguente:
string stringa_vecchia = "stringa_ascii";
wstring stringa_nuova = L"stringa_unicode";
LPTSTR stringa_magica = _T("stringa_generica");

Nella stessa categoria...
E-Learning
Corso ASP.NETCorso ASP.NET
Corso completo per la creazione di applicazioni Web. A partire da 49 €.
Corso OpenOfficeCorso OpenOffice
Il software open-source per la gestione del lavoro d'ufficio. A soli 25 €.
Corso Paint Shop ProCorso Paint Shop Pro
Grafica Web e fotoritocco col noto Corel PSP. A partire da 39 €.
Link sponsorizzati