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 implementierungsdefinierte Form, so dass der Vergleich zweier transformierter Zeichenketten mit std::strcmp dasselbe Ergebnis liefert wie der Vergleich der ursprünglichen Zeichenketten mit std::strcoll, in der aktuellen C-Locale.
Die ersten count Zeichen der transformierten Zeichenkette werden in das Ziel geschrieben, einschließlich des terminierenden Nullzeichens, und die Länge der vollständigen transformierten Zeichenkette wird zurückgegeben, ausgenommen des terminierenden Nullzeichens.
Das Verhalten ist undefiniert, wenn das dest-Array nicht groß genug ist. Das Verhalten ist undefiniert, wenn dest und src sich überlappen.
Wenn count 0 ist, dann darf dest ein Nullzeiger sein.
Inhalt |
[edit] 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 Locale-abhängige Vergleiche mit derselben Zeichenkette oder einem Satz von Zeichenketten durchgeführt werden, da es effizienter ist, std::strxfrm zu verwenden, um alle Zeichenketten einmal zu transformieren und anschließend die transformierten Zeichenketten mit std::strcmp zu vergleichen.
[edit] 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 |
| zählt | - | maximale Anzahl von zu schreibenden Zeichen |
[edit] Rückgabewert
Die Länge der transformierten Zeichenkette, ohne das terminierende Nullzeichen.
[edit] 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
[edit] Siehe auch
transformiert eine breite Zeichenkette so, dass wcscmp dasselbe Ergebnis wie wcscoll 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 Strings gemäß der aktuellen Locale (Funktion) | |
| C-Dokumentation für strxfrm
| |