std:: strxfrm
|
Défini dans l'en-tête
<cstring>
|
||
|
std::
size_t
strxfrm
(
char
*
dest,
const
char
*
src,
std::
size_t
count
)
;
|
||
Transforme la chaîne d'octets terminée par un nul pointée par src dans la forme définie par l'implémentation telle que la comparaison de deux chaînes transformées avec std::strcmp donne le même résultat que la comparaison des chaînes originales avec std::strcoll , dans les paramètres régionaux C actuels.
Les premiers count caractères de la chaîne transformée sont écrits dans la destination, y compris le caractère nul de fin, et la longueur de la chaîne transformée complète est renvoyée, à l'exclusion du caractère nul de fin.
Le comportement n'est pas défini si le tableau dest n'est pas suffisamment grand. Le comportement n'est pas défini si dest et src se chevauchent.
Si count est 0 , alors dest peut être un pointeur nul.
Table des matières |
Notes
La longueur correcte du tampon qui peut recevoir la chaîne transformée entière est 1 + std :: strxfrm ( nullptr, src, 0 ) .
Cette fonction est utilisée lors de multiples comparaisons dépendantes de la locale utilisant la même chaîne ou le même ensemble de chaînes, car il est plus efficace d'utiliser std::strxfrm pour transformer toutes les chaînes une seule fois, puis de comparer ultérieurement les chaînes transformées avec std::strcmp .
Paramètres
| dest | - | pointeur vers le premier élément du tableau où la chaîne transformée sera écrite |
| src | - | pointeur vers le premier caractère d'une chaîne d'octets terminée par un caractère nul à transformer |
| count | - | nombre maximum de caractères à écrire |
Valeur de retour
La longueur de la chaîne transformée, sans inclure le caractère nul de fin.
Exemple
#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'; }
Sortie possible :
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
Voir aussi
transforme une chaîne large de sorte que
wcscmp
produirait le même résultat que
wcscoll
(fonction) |
|
|
[virtual]
|
transforme une chaîne de sorte que la collation peut être remplacée par la comparaison
(fonction membre protégée virtuelle de
std::collate<CharT>
)
|
|
compare deux chaînes conformément à la locale actuelle
(fonction) |
|
|
Documentation C
pour
strxfrm
|
|