Namespaces
Variants

std:: wcsxfrm

From cppreference.net
Definiert im Header <cwchar>
std:: size_t wcsxfrm ( wchar_t * dest, const wchar_t * src, std:: size_t count ) ;

Transformiert die nullterminierte Breitzeichen-Zeichenkette, auf die src zeigt, in die implementationsdefinierte Form, sodass der Vergleich zweier transformierter Zeichenketten mit std::wcscmp das gleiche Ergebnis liefert wie der Vergleich der ursprünglichen Zeichenketten mit std::wcscoll in der aktuellen C-Locale.

Die ersten count Zeichen der transformierten Zeichenkette werden in das Ziel geschrieben, einschließlich des abschließenden Nullzeichens, und die Länge der vollständigen transformierten Zeichenkette wird zurückgegeben, ohne das abschließende Nullzeichen.

Wenn count gleich 0 ist, dann darf dest ein Nullzeiger sein.

Inhaltsverzeichnis

Hinweise

Die korrekte Länge des Puffers, der die gesamte transformierte Zeichenkette aufnehmen kann, ist 1 + std :: wcsxfrm ( nullptr, src, 0 ) .

Diese Funktion wird verwendet, wenn mehrere gebietsschemaabhängige Vergleiche mit derselben Breitzeichen-Zeichenkette oder demselben Satz von Breitzeichen-Zeichenketten durchgeführt werden, da es effizienter ist, std::wcsxfrm zu verwenden, um alle Zeichenketten nur einmal zu transformieren und anschließend die transformierten Breitzeichen-Zeichenketten mit std::wcscmp zu vergleichen.

Parameter

dest - Zeiger auf das erste Element einer nullterminierten Breitzeichen-Zeichenkette, in die die transformierte Zeichenkette geschrieben werden soll
src - Zeiger auf die zu transformierende nullterminierte Breitzeichen-Zeichenkette
count - maximale Anzahl der auszugebenden Zeichen

Rückgabewert

Die Länge der transformierten Breitzeichenkette, ohne den abschließenden Nullterminator.

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

Siehe auch

transformiert einen String so, dass strcmp das gleiche Ergebnis wie strcoll liefern würde
(Funktion)
[virtual]
transformiert einen String, sodass Kollation durch Vergleich ersetzt werden kann
(virtuelle geschützte Memberfunktion von std::collate<CharT> )
vergleicht zwei Wide-Strings gemäß der aktuellen Locale
(Funktion)
C-Dokumentation für wcsxfrm