std::wcsxfrm
| Definiert in Header <cwchar> |
||
| std::size_t wcsxfrm( wchar_t* dest, const wchar_t* src, std::size_t count ); |
||
Transformiert den Null-terminierten Breitzeichenstring, auf den von src gezeigt wird, in die implementierungsdefinierte Form, so dass der Vergleich zweier transformierter Strings mit std::wcscmp dasselbe Ergebnis liefert wie der Vergleich der ursprünglichen Strings mit std::wcscoll, in der aktuellen C-Locale.
Die ersten count Zeichen des transformierten Strings werden in das Ziel geschrieben, einschließlich des abschließenden Nullzeichens. Die Länge des vollständigen transformierten Strings, exklusive des abschließenden Nullzeichens, wird zurückgegeben.
Wenn count 0 ist, darf dest ein Nullzeiger sein.
Inhalt |
[bearbeiten] Hinweise
Die korrekte Pufferlänge, die den gesamten transformierten String aufnehmen kann, ist 1 + std::wcsxfrm(nullptr, src, 0).
Diese Funktion wird verwendet, wenn mehrere Locale-abhängige Vergleiche mit demselben Breitzeichenstring oder einer Menge von Breitzeichenstrings durchgeführt werden, da es effizienter ist, std::wcsxfrm zu verwenden, um alle Strings nur einmal zu transformieren und anschließend die transformierten Breitzeichenstrings mit std::wcscmp zu vergleichen.
[bearbeiten] Parameter
| dest | - | Zeiger auf das erste Element eines Null-terminierten Breitzeichenstrings, in den der transformierte String geschrieben wird |
| src | - | Zeiger auf den Null-terminierten Breitzeichenstring, der transformiert werden soll |
| zählt | - | maximale Anzahl auszugebender Zeichen |
[bearbeiten] Rückgabewert
Die Länge des transformierten Breitzeichenstrings, exklusive des abschließenden Nullzeichens.
[bearbeiten] Beispiel
#include <cwchar> #include <iostream> int main() { std::setlocale(LC_ALL, "sv_SE.utf8"); std::wstring in1 = L"\u00e5r"; std::wstring out1(1 + std::wcsxfrm(nullptr, in1.c_str(), 0), L' '); std::wstring in2 = L"\u00e4ngel"; std::wstring out2(1 + std::wcsxfrm(nullptr, in2.c_str(), 0), L' '); std::wcsxfrm(&out1[0], in1.c_str(), out1.size()); std::wcsxfrm(&out2[0], in2.c_str(), out2.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 lexicographical 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 lexicographical comparison: ängel before år
[bearbeiten] Siehe auch
transformiert einen String so, dass strcmp das gleiche Ergebnis wie strcoll liefert(Funktion) | |
| [virtuell] |
transformiert eine Zeichenkette, damit die Sortierung durch einen Vergleich ersetzt werden kann (virtual protected member function of std::collate<CharT>) |
| vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale (Funktion) | |
| C-Dokumentation für wcsxfrm
| |