Namespaces
Variants

std:: strxfrm

From cppreference.net
Definiert in Header <cstring>
std:: size_t strxfrm ( char * dest, const char * src, std:: size_t count ) ;

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

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

Das Verhalten ist undefiniert, wenn das dest -Array nicht groß genug ist. Das Verhalten ist undefiniert, wenn sich dest und src überlappen.

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 :: strxfrm ( nullptr, src, 0 ) .

Diese Funktion wird verwendet, wenn mehrere gebietsschemaabhängige Vergleiche mit demselben String oder derselben Gruppe von Strings durchgeführt werden, da es effizienter ist, std::strxfrm zu verwenden, um alle Strings nur einmal zu transformieren und anschließend die transformierten Strings mit std::strcmp zu vergleichen.

Parameter

dest - Zeiger auf das erste Element des Arrays, in das die transformierte Zeichenkette geschrieben wird
src - Zeiger auf das erste Zeichen einer nullterminierten Byte-Zeichenkette, die transformiert werden soll
count - maximale Anzahl der zu schreibenden Zeichen

Rückgabewert

Die Länge des transformierten Strings, ohne den abschließenden Nullterminator.

Beispiel

#include <cassert>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <string>
int main()
{
    char* loc = std::setlocale(LC_COLLATE, "cs_CZ.iso88592");
    assert(loc);
    std::string in1 = "hrnec";
    std::string out1(1 + std::strxfrm(nullptr, in1.c_str(), 0), ' ');
    std::string in2 = "chrt";
    std::string out2(1 + std::strxfrm(nullptr, in2.c_str(), 0), ' ');
    std::strxfrm(&out1[0], in1.c_str(), out1.size());
    std::strxfrm(&out2[0], in2.c_str(), out2.size());
    std::cout << "In the Czech locale: ";
    if (out1 < out2)
        std::cout << in1 << " before " << in2 << '\n';
    else
        std::cout << in2 << " before " << in1 << '\n';
    std::cout << "In lexicographical comparison: ";
    if (in1 < in2)
        std::cout << in1 << " before " << in2 << '\n';
    else
        std::cout << in2 << " before " << in1 << '\n';
}

Mögliche Ausgabe:

In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec

Siehe auch

transformiert eine Breitzeichen-Zeichenkette so, dass wcscmp das gleiche Ergebnis wie wcscoll liefern würde
(Funktion)
[virtual]
transformiert eine Zeichenkette, sodass Kollation durch Vergleich ersetzt werden kann
(virtuelle geschützte Memberfunktion von std::collate<CharT> )
vergleicht zwei Zeichenketten gemäß der aktuellen Locale
(Funktion)
C-Dokumentation für strxfrm