Ce face std::isalpha
Funcțiile din <cctype> primesc un caracter și răspund la o întrebare: isalpha (literă a–z, A–Z), isdigit (cifră 0–9), isalnum (literă sau cifră), isspace (spațiu, tab, rând nou), isupper / islower (literă mare / mică), ispunct (semne precum . , ! ? ; -).
Returnează un int: diferit de zero pentru „da” (nu neapărat 1) și 0 pentru „nu”. Se folosesc direct în condiții: if (std::isdigit(c)).
Lucrează cu un singur octet. Literele românești ă, î, ș, ț au câte doi octeți în UTF-8 și nu sunt recunoscute ca litere. Important: un char cu valoare negativă (cum sunt octeții diacriticelor) trebuie convertit la unsigned char înainte, altfel comportamentul este nedefinit.
Parametri
| Parametru | Descriere |
|---|---|
c |
Caracterul verificat, convertit la unsigned char (sau EOF). |
Ce returnează
Un int diferit de zero dacă răspunsul este „da”, altfel 0.
Exemple
Exemplul 1: Statistica unui text
#include <cctype>
#include <iostream>
#include <string>
int main() {
std::string text = "Parola123, a lui Ion!";
int litere = 0, cifre = 0, spatii = 0, mari = 0, punctuatie = 0;
for (unsigned char c : text) {
if (std::isalpha(c)) ++litere;
if (std::isdigit(c)) ++cifre;
if (std::isspace(c)) ++spatii;
if (std::isupper(c)) ++mari;
if (std::ispunct(c)) ++punctuatie;
}
std::cout << "litere " << litere << ", cifre " << cifre << ", spații " << spatii
<< ", majuscule " << mari << ", punctuație " << punctuatie << '\n';
}
Rezultat
litere 13, cifre 3, spații 3, majuscule 2, punctuație 2
Exemplul 2: Validarea unei parole
#include <cctype>
#include <iostream>
#include <string>
bool parola_buna(const std::string& p) {
bool mare = false, mica = false, cifra = false;
for (unsigned char c : p) {
if (std::isupper(c)) mare = true;
if (std::islower(c)) mica = true;
if (std::isdigit(c)) cifra = true;
}
return p.size() >= 8 && mare && mica && cifra;
}
int main() {
for (std::string p : {"parola", "Parola2026", "PAROLA2026", "Ab1"}) {
std::cout << p << ": " << (parola_buna(p) ? "bună" : "slabă") << '\n';
}
}
Rezultat
parola: slabă
Parola2026: bună
PAROLA2026: slabă
Ab1: slabă
Exemplul 3: Diacriticele nu sunt litere pentru isalpha
„Iași” are 4 litere, dar „ș” ocupă doi octeți, iar niciunul nu este considerat literă.
#include <cctype>
#include <iostream>
#include <string>
int main() {
std::string oras = "Iași";
int litere = 0, alnum = 0;
for (unsigned char c : oras) {
if (std::isalpha(c)) ++litere;
if (std::isalnum(c)) ++alnum;
}
std::cout << oras << ": " << oras.size() << " octeți, isalpha a numărat " << litere
<< ", isalnum " << alnum << '\n';
}
Rezultat
Iași: 5 octeți, isalpha a numărat 3, isalnum 3
Greșeli frecvente
- Dai direct un
charcu diacritice:std::isalpha(s[i]). Pe platformele undecharare semn, octeții UTF-8 sunt negativi, iar rezultatul este nedefinit. Scriestd::isalpha(static_cast<unsigned char>(s[i])). - Compari rezultatul cu
truesau1:if (std::isdigit(c) == 1)poate fi fals chiar pentru o cifră, pentru că „da” poate fi orice valoare diferită de zero.
Comenzi înrudite
std::toupper: Transformă o literă în majusculă (toupper) sau minusculă (tolower); restul rămân neschimbate.std::string::find_first_of: Caută primul sau ultimul caracter dintr-un set, sau primul caracter care nu e în set.std::istream::peek: Arată următorul caracter din intrare fără să-l consume.std::regex: O expresie regulată compilată, folosită pentru verificarea, căutarea și înlocuirea textului.