std::isxdigit(std::locale)(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::isxdigit(std::locale)(3) πŸ’–

okay so this page is from the C++ Standard Libary manual (yes, that's the spelling up top, bestie), section 3. It's all about the locale-flavored std::isxdigit check. iconic behavior, honestly. ✨

🌸 NAME 🌸

std::isxdigit(std::locale) β€” std::isxdigit(std::locale) πŸ’… (the name really is the thing twice, periodt).

✨ Synopsis ✨

Defined in header <locale>
template< class CharT >
bool isxdigit( CharT ch, const locale& loc );

It checks if the given character is classified as a hexadecimal digit by the given locale's std::ctype facet. That's the whole vibe.

πŸŽ€ Parameters πŸŽ€

  • ch β€” character
  • loc β€” locale

πŸ’« Return value πŸ’«

Returns true if the character is classified as a hexadecimal digit, false otherwise. Simple slay.

πŸ› οΈ Possible implementation πŸ› οΈ

Here's one way it could look under the hood, no cap:

template<class CharT>
bool isxdigit(CharT ch, const std::locale& loc)
{
    return std::use_facet<std::ctype<CharT>>(loc).is(std::ctype_base::xdigit, ch);
}

🌟 Example 🌟

okay bestie, run this code if you wanna see it in action:

// Run this code

#include <iostream>
#include <locale>
#include <string>
#include <unordered_set>

struct gxdigit_ctype : std::ctype<wchar_t>
{
    std::unordered_set<wchar_t> greek_digits{L'Ξ±', L'Ξ²', L'Ξ³', L'Ξ΄', L'Ξ΅', L'ΞΆ'};

    bool do_is(mask m, char_type c) const override
    {
        return (m & xdigit) && greek_digits.contains(c)
            ? true // 6 first Greek small letters will be classified as digits
            : ctype::do_is(m, c); // leave the rest to the parent class
    }
};

int main()
{
    std::wstring text = L"0123456789abcdefABCDEFαβγδΡ΢ηθικλμ";
    std::locale loc(std::locale(""), new gxdigit_ctype);

    std::locale::global(std::locale("en_US.utf8"));
    std::wcout.imbue(std::locale());

    std::wcout << "Hexadecimal digits in text: ";
    for (const wchar_t c : text)
        if (std::isxdigit(c, loc))
            std::wcout << c << L' ';
    std::wcout << L'\n';

    std::wcout << "Not hexadecimal digits in text: ";
    for (const wchar_t c : text)
        if (not std::isxdigit(c, loc))
            std::wcout << c << L' ';
    std::wcout << L'\n';
}

🌈 Output 🌈

Hexadecimal digits in text: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F Ξ± Ξ² Ξ³ Ξ΄ Ξ΅ ΞΆ
Not hexadecimal digits in text: Ξ· ΞΈ ΞΉ ΞΊ Ξ» ΞΌ

πŸ‘€ See also πŸ‘€

go peek at these too:

  • isxdigit β€” checks if a character is a hexadecimal character (function)
  • iswxdigit β€” checks if a wide character is a hexadecimal character (function)

mwah πŸ’‹ β€” source/version/date tea: http://cppreference.com, 2024.06.10, page tag std::isxdigit(std::locale)(3). byeee bestie 🫢✨

πŸ“¦ where this page comes from