ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°. Π‘ΠΈΠΌΠ²ΠΎΠ» '\374' Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ toupper, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π±ΡΠΊΠ²ΠΎΠΉ; Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ ΓΌ, Π½ΠΎ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ C, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ Ρ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ. Π ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ ASCII Π½Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΓΌ. ΠΠΎΠΌΠ°Π½Π΄Π°
setlocale(LC_ALL, "de");
ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ C ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ Π½Π° Π½Π΅ΠΌΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ IRIX β ΠΈΠΌΠ΅Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Ρ). Π Π½Π΅ΠΌΠ΅ΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» ΓΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ toupper ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΓΌ Π² Γ.
Π£ Π»ΡΠ±ΠΎΠ³ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΡΡΠΎΡ ΡΠ°ΠΊΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ. ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΏΡΠΎΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ toupper, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, Π·Π°Π²ΠΈΡΠΈΡ Π΅ΡΠ΅ ΠΈ ΠΎΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ β Ρ ΡΠΆΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΡ ΡΠΊΡΡΡΠΎΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅: Π½Π° ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ toupper, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π»ΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ toupper Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΌ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠΉ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ, ΡΠΏΠΈΡΠΎΠΊ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, binary_search); Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΊ Π²Π΄ΡΡΠ³ Π½ΠΎΠ²ΡΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° Ρ ΠΎΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ Π²ΠΎΠΎΠ±ΡΠ΅ Π΅Π΄Π²Π° Π»ΠΈ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΏΡΠΈΠ½Π΅ΡΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠΎΠ»ΡΠ·Ρ. ΠΠ³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ setlocalΠ΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΡΠ΄Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΡΠ΄Π°ΡΡΡΡ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ setlocalΠ΅, Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π²ΡΠ·ΠΎΠ² setlocalΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
Π ΡΠ·ΡΠΊΠ΅ C ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΈ Ρ ΡΡΠΈΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΅Π»Π°Π΅ΡΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΡΠ·ΡΠΊΠ΅ C++.
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π² C++
Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ C++ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π·Π°ΠΏΡΡΡΠ°Π½Π½ΠΎΠΉ Π³Π΄Π΅-ΡΠΎ Π² Π½Π΅Π΄ΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° std::locale, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
std::locale L = std::locale::classic();
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π΅ΠΌΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
std::locale L("de");
ΠΠΌΠ΅Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ C, Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΎΠ²Π°Π½Ρ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ², Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΊΠ°ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ C++ Π΄Π΅Π»ΡΡΡΡ Π½Π° ΡΠ°ΡΠ΅ΡΡ (facets), ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π°ΡΠΏΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΡΠ΅ΡΠ° ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ std::use_facet[6]. Π€Π°ΡΠ΅Ρ ctype ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ°. ΠΡΠ»ΠΈ c1 ΠΈ c2 ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ char, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΈΡ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° L.
const std::ctype<char>& ct = std::use_facet<std::ctype<char> >(L);
bool result = ct.toupper(c1) < ct.toupper(c2);
ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΎΡΠΎΠ±Π°Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½Π°Ρ Π·Π°ΠΏΠΈΡΡ: std::toupper(c, L), ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π°Ρ
std::use_facet<std::ctype<char> >(L).toupper(c)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ use_facet ΡΡΠΎΠΈΡ ΡΠ²Π΅ΡΡΠΈ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌΠΈ.
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π»Π΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Β«ΠΎΠ΄ΠΈΠ½-Π²-ΠΎΠ΄ΠΈΠ½Β» ΡΠΎΠΆΠ΅ Π³ΠΎΠ΄ΡΡΡΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π½Π΅ΠΌΠ΅ΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΠΈΠΌΠ²ΠΎΠ» (Γ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Β«SSΒ» Π² Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅). Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ Π‘ ΠΈ C++ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π²Π°Ρ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΎΡΠΏΠ°Π΄Π°Π΅Ρ.
Π€Π°ΡΠ΅Ρ collate
ΠΡΠ»ΠΈ Π²Ρ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°ΠΌΠΈ C++, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΡΠΆΠ΅ ΠΏΡΠΈΡΠ΅Π» Π² Π³ΠΎΠ»ΠΎΠ²Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊ. Π£ ΡΠ°ΡΠ΅ΡΠ° collate, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²Π΅ΡΡΠΌΠ° Π±Π»ΠΈΠ·ΠΊΠ°Ρ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ C strcmp. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, ΡΠΏΡΠΎΡΠ°ΡΡΠ΅Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΡΡΠΎΠΊ: Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° L ΡΡΡΠΎΠΊΠΈ x ΠΈ y ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ L(x, y), ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· Ρ Π»ΠΎΠΏΠΎΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ use_facet ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ collate.
Β«ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉΒ» Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΡΠ΅Ρ collate, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π»Π΅ΠΊΡΠΈΠΊΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ operator< ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° string, Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΡΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΡ Π²Π°Ρ ΡΠ·ΡΠΊΠΎΠ², Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΈΠΌ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²!
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΠΉ Π½ΠΈ Π±ΡΠ»Π° ΡΡΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ, ΠΎΠ½Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΠΌ, Ρ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ ΡΠ°ΠΊΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ². ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ, Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π°, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°
Π€Π°ΡΠ΅Ρ ctype ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ Π²Π΅ΡΡΠΈΡ Π½Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½Π°, Π½ΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ½Π° Π²Π΅ΡΠ½Π°. Π Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΡΡΠΎ ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅: ΡΡΡΠΎΠΊΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ lexicographical_compare, Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π½Π° ΡΡΠΎΡ ΡΠ°Π· Π²ΠΌΠ΅ΡΡΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΡΡΠ°ΡΠΈ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΊ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄Π°Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΡΡΠ°Π½ΡΡΠ·ΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π² ΡΠΈΠΌΠ²ΠΎΠ»Π°Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΏΡΠΈΠ½ΡΡΠΎ ΠΎΠΏΡΡΠΊΠ°ΡΡ Π΄ΠΈΠ°ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΠΊΠΈ, Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ² toupper Π²ΠΎ ΡΡΠ°Π½ΡΡΠ·ΡΠΊΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ: ΡΠΈΠΌΠ²ΠΎΠ»Ρ 'Ρ' ΠΈ 'Π΅' ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ» Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° 'Π'. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Π½Π° Π±Π°Π·Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ toupper ΡΠΈΠΌΠ²ΠΎΠ»Ρ 'Γ©' ΠΈ 'Π΅' Π±ΡΠ΄ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ, Π° ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Π½Π° Π±Π°Π·Π΅ tolower ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ. ΠΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½? ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Π²ΡΠΎΡΠΎΠΉ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ·ΡΠΊΠ°, Π½Π°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΎΠ±ΡΡΠ°Π΅Π² ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
struct lt_str_1:
public std::binary_function<std::string, std::string, bool> {
struct lt_char {
const std::ctype<char>& ct;
lt_char(const std::ctype<char>& c):ct(c) {}
bool operator()(char x, char y) const {
return ct.toupper(x) < ct.toupper(y);
}
};
std::locale loc;
const std::ctype<char>& ct;
lt_str_l(const std::locale& L = std::locale::classic()):
loc(L), ct(std::use_facet<std::ctype<char> >(loc)) {}
bool operator()(const std::string& x, const std::string& y) const {
return std::lexicographical_compare(x.begin(), x.end(),
y.begin(), y.end(), lt_char(ct));
}
};
ΠΠ°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ; ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΈΡΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ: ΡΡΠ½ΠΊΡΠΈΡ toupper Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅, Π° Π‘ΡΠ°Π½Π΄Π°ΡΡ C++ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ»Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΡ Π²ΡΠ²ΠΎΠ΄ΡΡ Π²ΡΠ·ΠΎΠ² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΠΈΠΊΠ»Π°, Π½ΠΎ ΡΠ°ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. Π¦ΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Ρ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΌΡΡΠ»Ρ β Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ctype:
const char* ctype<char>::toupper(char* f, char* i) const
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ [f, i]. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π΄Π»Ρ Π½Π°ΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΡΡΠΎΠΊ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±Π΅ ΡΡΡΠΎΠΊΠΈ Π² Π±ΡΡΠ΅ΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊ Π²Π΅ΡΡ Π½Π΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΠΎ ΠΎΡΠΊΡΠ΄Π° Π²ΠΎΠ·ΡΠΌΡΡΡΡ ΡΡΠΈ Π±ΡΡΠ΅ΡΡ? ΠΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° (Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ), Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΏΠΎΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅Π³ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π’Π°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎ β Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² UCS-4 ΠΎΠ½ΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΈΠΏΠΎΠΌ char (8-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΌ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌ) ΠΈΠ΄Π΅Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ 256 Π±Π°ΠΉΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½ΠΎ.