< cpp‎ | locale
Localizations library
Locales and facets
Facet category base classes
ctype facets
numeric facets
collate facets
time facets
monetary facets
messages facets
Character classification and conversion
Character classification
Code conversion facets
C locale
Text encoding identifications
Defined in header <locale>
template< class CharT >
CharT tolower( CharT ch, const locale& loc );

Converts the character ch to lowercase if possible, using the conversion rules specified by the given locale's std::ctype facet.


[edit] Parameters

ch - character
loc - locale

[edit] Return value

Returns the lowercase form of ch if one is listed in the locale, otherwise return ch unchanged.

[edit] Notes

Only 1:1 character mapping can be performed by this function, e.g. the Greek uppercase letter 'Σ' has two lowercase forms, depending on the position in a word: 'σ' and 'ς'. A call to std::tolower cannot be used to obtain the correct lowercase form in this case.

[edit] Possible implementation

template<class CharT>
CharT tolower(CharT ch, const std::locale& loc)
    return std::use_facet<std::ctype<CharT>>(loc).tolower(ch);

[edit] Example

#include <cwctype>
#include <iostream>
#include <locale>
int main()
    wchar_t c = L'\u0190'; // Latin capital open E ('Ɛ')
    std::cout << std::hex << std::showbase;
    std::cout << "in the default locale, tolower(" << (std::wint_t)c << ") = "
              << (std::wint_t)std::tolower(c, std::locale()) << '\n';
    std::cout << "in Unicode locale, tolower(" << (std::wint_t)c << ") = "
              << (std::wint_t)std::tolower(c, std::locale("en_US.utf8")) << '\n';

Possible output:

in the default locale, tolower(0x190) = 0x190
in Unicode locale, tolower(0x190) = 0x25b

[edit] See also

converts a character to uppercase using the ctype facet of a locale
(function template) [edit]
converts a character to lowercase
(function) [edit]
converts a wide character to lowercase
(function) [edit]