std::isxdigit(std::locale)
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Text processing library
Regular expressions library (C++11)
Formatting library (C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++26)
Localization library
(C++11/17/26*)
(C++11/17/26*)
(C++11/17/26*)
(C++11/17/26*)
(C++11/17/26*)
(C++11/17/26*)
Defined in header
<locale>
template< class CharT >
bool isxdigit( CharT ch, const locale& loc );
bool isxdigit( CharT ch, const locale& loc );
Checks if the given character is classified as a hexadecimal digit by the given locale's std::ctype facet.
[edit] Parameters
ch
-
character
loc
-
locale
[edit] Return value
Returns true if the character is classified as a hexadecimal digit, false otherwise.
[edit] Possible implementation
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); }
[edit] Example
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: η θ ι κ λ μ