ctype.h (isdigit, isalpha, toupper…) în C

Funcții care verifică ce fel de caracter ai (cifră, literă, spațiu) și care schimbă literele mari în mici și invers.

Sintaxă
#include <ctype.h>
int isdigit(int c);  int isalpha(int c);  int isalnum(int c);
int isspace(int c);  int isupper(int c);  int islower(int c);
int ispunct(int c);  int toupper(int c);  int tolower(int c);

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 char negativ direct funcției (isalpha(c) cu un octet din „ă”): comportament nedefinit. Convertește la unsigned char.
  • Compari rezultatul cu 1: isdigit(c) == 1 poate 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 (towupper din wctype.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).
Comunitate & Schimb de cunoștințe

Î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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.