Namensräume
Varianten
Aktionen

std::wcsxfrm

Von cppreference.com
< cpp‎ | string‎ | wide
 
 
 
 
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) [bearbeiten]
[virtuell]
transformiert eine Zeichenkette, damit die Sortierung durch einen Vergleich ersetzt werden kann
(virtual protected member function of std::collate<CharT>) [edit]
vergleicht zwei breite Zeichenketten gemäß der aktuellen Locale
(Funktion) [bearbeiten]
C-Dokumentation für wcsxfrm