Funcions sobre caràcters: cctype
Introducció

Sovint és necessari decidir si un caràcter és d'una certa classe o no. Per exemple, decidir si un caràcter és un dígit o una lletra i, en cas de ser lletra, si és una majúscula o una minúscula. També pot ser útil convertir lletres majúscules en minúscules o viceversa.
Malgrat que és relativament senzill d'escriure expressions per aquestes tasques, sol ser més ràpid i llegible utilitzar les funcions que hi ha definides a la llibreria <cctype>. Així, l'expressió
(c >= 'a' and c <= 'z') or (c >= 'A' and c <= 'Z')per determinar si el caràcter c és una lletra, s'escriuria
isalpha(c)utilitzant aquesta llibreria. Igualment, la conversió d'una lletra c en minúscula al seu equivalent en majúscula es podria escriure amb l'expressió
c - 'a' + 'A'però
toupper(c)és molt més llegible.
Les funcions de cctype
Per utilitzar les funcions sobre caràcters cal fer un #include <cctype> i un using namespace std;.
Aquestes funcions permeten indicar si un caràcter pertany a una de les classes més habituals:
bool isalnum(char c); // Indica si c és alfanumèric
bool isalpha(char c); // Indica si c és alfabètic
bool isblank(char c); // Indica si c és és un blanc
bool isdigit(char c); // Indica si c és dígit decimal
bool islower(char c); // Indica si c és una lletra minúscula
bool isupper(char c); // Indica si c és una lletra majúsculaAquestes funcions permeten indicar si un caràcter pertany a classes més exòtiques:
bool iscntrl(char c); // Indica si c és un caràcter de control
bool isgraph(char c); // Indica si c té una representació gràfica
bool isprint(char c); // Indica si c és imprimible
bool ispunct(char c); // Indica si c és un símbol de puntuació
bool isspace(char c); // Indica si c és un espai
bool isxdigit(char c); // Indica si c és un dígit hexadecimalI aquestes funcions permeten convertir entre majúscules i minúscules:
char tolower(char c); // Converteix una lletra c en minúscula
char toupper(char c); // Converteix una lletra c en majúsculaL'especificació completa es pot trobar a cppreference. Allà veureu que, per raons històriques, els paràmetres d'aquestes funcions no són chars com s'ha dit, sinó ints.
Exemple: Invertir majúscules i minúscules
Considerem que volem llegir un caràcter. Si és una lletra, quan és minúscula el volem escriure en majúscula i quan és majúscula el volem escriure en minúscula. Si no és una lletra cal escriure'l sense canvis.
Solucionar aquest problema amb <cctype> és directe:
#include <iostream>
#include <cctype>
using namespace std;
int main() {
char c;
cin >> c;
if (isalpha(c)) {
if (isupper(c)) cout << tolower(c) << endl;
else cout << toupper(c) << endl;
} else {
cout << c << endl;
}
}

Lliçons.jutge.org
Jordi Petit, Salvador Roura
© Universitat Politècnica de Catalunya, 2025
