# **[](https://en.cppreference.com/w/c/header/ctype)** provides character classification (`isalpha`, `isdigit`, `isspace`) and conversion (`toupper`, `tolower`). These functions handle the full range of `unsigned char` correctly and respect locale. Always cast to `unsigned char` when passing chars to avoid undefined behavior with negative signed values. ## Example This example classifies characters in a string as letters, digits, or spaces. ```c // compile: gcc -o ctypeexample ctypeexample.c // run: ./ctypeexample // description: count character types in a string #include #include #include int main() { const char* str = "Hello World 123"; int letters = 0, digits = 0, spaces = 0; for (size_t i = 0; str[i]; i++) { unsigned char c = (unsigned char)str[i]; if (isalpha(c)) letters++; else if (isdigit(c)) digits++; else if (isspace(c)) spaces++; } printf("letters=%d digits=%d spaces=%d\n", letters, digits, spaces); return 0; } ``` ## Common functions **Character classification** (return non-zero if true, zero if false): - `isalpha(c)`: alphabetic letter (A-Z, a-z) - `isdigit(c)`: decimal digit (0-9) - `isalnum(c)`: alphanumeric (letter or digit) - `isspace(c)`: whitespace (space, tab, newline, etc.) - `isblank(c)`: space or tab (C99) - `isupper(c)`: uppercase letter - `islower(c)`: lowercase letter - `isxdigit(c)`: hexadecimal digit (0-9, a-f, A-F) - `ispunct(c)`: punctuation - `isprint(c)`: printable (not control character) - `isgraph(c)`: visible character (print except space) - `iscntrl(c)`: control character (ASCII 0-31, 127) - `isascii(c)`: ASCII character (0-127, non-standard) **Case conversion**: - `toupper(c)`: convert to uppercase (returns character unchanged if not lowercase) - `tolower(c)`: convert to lowercase (returns character unchanged if not uppercase) **Notes**: - All functions take `int` (though typically passed `char`, which is promoted) - Behavior depends on locale (LC_CTYPE category) - For safe use with char arrays, use `isxxx((unsigned char)c)` to avoid negative char UB