std:: strxfrm
|
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
|
|