std::isalnum(3)
β¨ std::isalnum β¨
okay bestie, so we're diving into std::isalnum from the C++ Standard Library. lowkey iconic, ngl. π
πΈ SYNOPSIS πΈ
Defined in header <cctype>
int isalnum( int ch );
so basically this checks if the given character is an alphanumeric character as classified by the current C locale. no cap. in the default locale, the following characters are alphanumeric:
- digits (
0123456789) - uppercase letters (
ABCDEFGHIJKLMNOPQRSTUVWXYZ) - lowercase letters (
abcdefghijklmnopqrstuvwxyz)
β οΈ bestie listen β οΈ β the behavior is undefined if the value ofchis not representable asunsigned charand is not equal toEOF. like, don't do it. it's giving undefined behavior energy and we don't stan that. π
π PARAMETERS π
chβ character to classify (the main character, fr fr)
π RETURN VALUE π
Non-zero value if the character is an alphanumeric character, 0 otherwise. slay. that's the whole tea. β¨
π¦ NOTES π¦
Like all other functions from <cctype>, the behavior of std::isalnum is undefined if the argument's value is neither representable as unsigned char nor equal to EOF. so basically, to use these functions safely with plain chars (or signed chars), the argument should first be converted to unsigned char:
bool my_isalnum(char ch)
{
return std::isalnum(static_cast<unsigned char>(ch));
}
similarly, they should not be directly used with standard algorithms when the iterator's value type is char or signed char. instead, convert the value to unsigned char first:
int count_alnums(const std::string& s)
{
return std::count_if(s.begin(), s.end(),
// static_cast<int(*)(int)>(std::isalnum) // wrong
// [](int c){ return std::isalnum(c); } // wrong
// [](char c){ return std::isalnum(c); } // wrong
[](unsigned char c){ return std::isalnum(c); } // correct
);
}
like the comments literally spell it out for you bestie, the unsigned char version is the only correct one. the others are lowkey wrong and we don't do wrong here. π
π EXAMPLE π
this one demonstrates the use of std::isalnum with different locales (OS-specific, so ymmv bestie π«Ά).
// Run this code
#include <cctype>
#include <clocale>
#include <iostream>
int main()
{
unsigned char c = '\xdf'; // German letter Γ in ISO-8859-1
std::cout << "isalnum(\'\\xdf\', default C locale) returned "
<< std::boolalpha << static_cast<bool>(std::isalnum(c)) << '\n';
if (std::setlocale(LC_ALL, "de_DE.iso88591"))
std::cout << "isalnum(\'\\xdf\', ISO-8859-1 locale) returned "
<< static_cast<bool>(std::isalnum(c)) << '\n';
}
β Possible output:
isalnum('\xdf', default C locale) returned false
isalnum('\xdf', ISO-8859-1 locale) returned true
literally the same character getting different treatment depending on locale. it's giving "who am I really" existential crisis and honestly? relatable. π¦
π SEE ALSO π
isalnum(std::locale)β checks if a character is classified as alphanumeric by a locale (function template)iswalnumβ checks if a wide character is alphanumeric (function)- C documentation for
isalnum
π the whole ASCII vibe check (character classification table) π
okay so this is a LOT of data but it's all here bestie, no skipping. each row is a range of characters and then a bunch of β 0 / 0 values for each classification function. β 0 means yes, 0 means no. periodt. π
ASCII values characters iscntrl isprint isspace isblank isgraph ispunct isalnum isalpha isupper islower isdigit isxdigit
decimal hexadecimal octal iswcntrl iswprint iswspace iswblank iswgraph iswpunct iswalnum iswalpha iswupper iswlower iswdigit iswxdigit
0β8 \x0β\x8 \0β\10 control codes β 0 0 0 0 0 0 0 0 0 0 0 0
(NUL, etc.)
9 \x9 \11 tab (\t) β 0 0 β 0 β 0 0 0 0 0 0 0 0 0
whitespaces
10β13 \xAβ\xD \12β\15 (\n, \v, \f, β 0 0 β 0 0 0 0 0 0 0 0 0 0
\r)
14β31 \xEβ\x1F \16β\37 control codes β 0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 space 0 β 0 β 0 β 0 0 0 0 0 0 0 0 0
33β47 \x21β\x2F \41β\57 !"#$%&'()*+,-./ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
48β57 \x30β\x39 \60β\71 0123456789 0 β 0 0 0 β 0 0 β 0 0 0 0 β 0 β 0
58β64 \x3Aβ\x40 \72β\100 :;<=>?@ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
65β70 \x41β\x46 \101β\106 ABCDEF 0 β 0 0 0 β 0 0 β 0 β 0 β 0 0 0 β 0
71β90 \x47β\x5A \107β\132 GHIJKLMNOP 0 β 0 0 0 β 0 0 β 0 β 0 β 0 0 0 0
QRSTUVWXYZ
91β96 \x5Bβ\x60 \133β\140 [\]^_` 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
97β102 \x61β\x66 \141β\146 abcdef 0 β 0 0 0 β 0 0 β 0 β 0 0 β 0 0 β 0
103β122 \x67β\x7A \147β\172 ghijklmnop 0 β 0 0 0 β 0 0 β 0 β 0 0 β 0 0 0
qrstuvwxyz
123β126 \x7Bβ\x7E \172β\176 {|}~ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
127 \x7F \177 backspace β 0 0 0 0 0 0 0 0 0 0 0 0
character (DEL)
that's the whole table bestie, every single row, nothing skipped. ikyk. π§
okay that's the whole page!! hope this helped you understand std::isalnum bestie, you're gonna do amazing. stay slaying those characters. πβ¨πΈ
β the tea was spilled with love from http://cppreference.com, dated 2024.06.10, and you already know the manual page is std::isalnum(3). mwah π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms