Ce face ctype.h (isdigit, isalpha, toupper...)
Funcțiile is... întorc o valoare diferită de zero (adevărat) dacă caracterul este din categoria respectivă: isdigit cifre 0–9, isalpha litere, isalnum litere sau cifre, isspace spațiu, tab, rând nou, isupper/islower litere mari/mici, ispunct semne de punctuație.
toupper și tolower întorc litera transformată; orice alt caracter rămâne neschimbat. Nu modifică șirul: pentru tot șirul folosești o buclă.
Argumentul trebuie să fie EOF sau o valoare care încape în unsigned char. Un char poate fi negativ (de exemplu octeții din „ș” în UTF-8), așa că scrie isalpha((unsigned char)c). Funcțiile lucrează pe octeți, deci nu recunosc literele românești cu diacritice în UTF-8.
Parametri
| Parametru | Descriere |
|---|---|
c |
Caracterul testat, convertit la unsigned char, sau EOF. |
Ce returnează
Funcțiile is...: diferit de 0 pentru adevărat, 0 pentru fals (nu neapărat 1). toupper/tolower: caracterul transformat.
Exemple
Exemplul 1: Numărarea literelor, cifrelor și spațiilor
#include <ctype.h>
#include <stdio.h>
int main(void) {
const char *text = "Str. Pacurari 12, Iasi 700511";
int litere = 0, cifre = 0, spatii = 0;
for (const char *p = text; *p != '\0'; p++) {
unsigned char c = (unsigned char)*p;
if (isalpha(c)) litere++;
else if (isdigit(c)) cifre++;
else if (isspace(c)) spatii++;
}
printf("litere: %d, cifre: %d, spații: %d\n", litere, cifre, spatii);
return 0;
}
Rezultat
litere: 15, cifre: 8, spații: 4
Exemplul 2: Transformarea unui cod în majuscule
#include <ctype.h>
#include <stdio.h>
int main(void) {
char cod[] = "ro-is-2026";
for (char *p = cod; *p != '\0'; p++) {
*p = (char)toupper((unsigned char)*p);
}
printf("%s\n", cod);
return 0;
}
Rezultat
RO-IS-2026
Exemplul 3: Este un număr de telefon valid?
Verificăm că șirul are exact 10 caractere și toate sunt cifre.
#include <ctype.h>
#include <stdio.h>
#include <string.h>
static bool doar_cifre(const char *s) {
for (; *s != '\0'; s++) {
if (!isdigit((unsigned char)*s)) {
return false;
}
}
return true;
}
int main(void) {
const char *telefoane[] = {"0745123456", "0745-12345", "074512"};
for (size_t i = 0; i < 3; i++) {
bool ok = strlen(telefoane[i]) == 10 && doar_cifre(telefoane[i]);
printf("%-11s %s\n", telefoane[i], ok ? "valid" : "invalid");
}
return 0;
}
Rezultat
0745123456 valid
0745-12345 invalid
074512 invalid
Greșeli frecvente
- Dai un
charnegativ direct funcției (isalpha(c)cu un octet din „ă”): comportament nedefinit. Convertește launsigned char. - Compari rezultatul cu 1:
isdigit(c) == 1poate fi fals pentru o cifră, pentru că funcția poate întoarce orice valoare nenulă. - Aștepți ca
toupper('ș')să dea „Ș”. Pentru text UTF-8 cu diacritice ai nevoie de funcțiile pentru caractere largi (towupperdinwctype.h) sau de o bibliotecă Unicode.
Comenzi înrudite
Șiruri de caractere (char[]): În C, un șir de caractere este un tablou de char terminat cu caracterul nul ‘\0’, care marchează sfârșitul textului.getchar: Citește un singur caracter de la intrarea standard; returnează EOF când intrarea s-a terminat.strtol și strtod: Transformă text în număr și îți spune unde s-a oprit citirea și dacă valoarea a depășit limitele.Tipuri de date (int, char, double): Tipurile de bază din C: întregi (char, short, int, long, long long), cu sau fără semn, și numere reale (float, double).
Întrebări & Exemple de Cod:
ctype.h (isdigit, isalpha, toupper…)Ai o nelămurire despre utilizarea comenzii
ctype.h (isdigit, isalpha, toupper…)sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.