std::collate<CharT>::transform, do_transform
Von cppreference.com
| Definiert in Header <locale> |
||
| public: string_type transform( const CharT* low, const CharT* high ) const; |
(1) | |
| protected: virtual string_type do_transform( const CharT* low, const CharT* high ) const; |
(2) | |
1) Öffentliche Member-Funktion, ruft die geschützte virtuelle Member-Funktion
do_transform der am weitesten abgeleiteten Klasse auf.2) Wandelt die Zeichensequenz
[low, high) in einen String um, der beim lexikographischen Vergleich (z.B. mit operator< für Strings) mit dem Ergebnis des Aufrufs von transform() für einen anderen String, dasselbe Ergebnis liefert wie der Aufruf von do_compare() für dieselben beiden Strings.Inhalt |
[bearbeiten] Parameter
| low | - | Zeiger auf das erste Zeichen in der zu transformierenden Sequenz |
| high | - | Einzeiger-Zeiger für die zu transformierende Sequenz |
[bearbeiten] Rückgabewert
Der transformierte String, so dass der lexikographische Vergleich der transformierten Strings anstelle der Kollation der Originale verwendet werden kann. In der "C"-Locale ist der zurückgegebene String eine exakte Kopie von [low, high). In anderen Locales sind die Inhalte des zurückgegebenen Strings implementierungsabhängig, und die Größe kann erheblich länger sein.
[bearbeiten] Hinweise
Zusätzlich zur Verwendung in der Kollation ist das implementierungsspezifische Format des transformierten Strings für std::regex_traits<>::transform_primary bekannt, das die Äquivalenzklasseninformationen extrahieren kann.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iomanip> #include <iostream> #include <locale> int main() { std::locale::global(std::locale("sv_SE.utf8")); auto& f = std::use_facet<std::collate<wchar_t>>(std::locale()); std::wstring in1 = L"\u00e4ngel"; std::wstring in2 = L"\u00e5r"; std::wstring out1 = f.transform(&in1[0], &in1[0] + in1.size()); std::wstring out2 = f.transform(&in2[0], &in2[0] + in2.size()); std::wcout << "In the Swedish locale: "; if (out1 < out2) std::wcout << in1 << " before " << in2 << '\n'; else std::wcout << in2 << " before " << in1 << '\n'; std::wcout << "In lexicographic comparison: "; if (in1 < in2) std::wcout << in1 << " before " << in2 << '\n'; else std::wcout << in2 << " before " << in1 << '\n'; }
Ausgabe
In the Swedish locale: år before ängel In lexicographic comparison: ängel before år
[bearbeiten] Siehe auch
transformiert einen String so, dass strcmp das gleiche Ergebnis wie strcoll liefert(Funktion) | |
transformiert eine breite Zeichenkette so, dass wcscmp dasselbe Ergebnis wie wcscoll liefert(Funktion) |