std::strxfrm
Определено в заголовочном файле <cstring>
|
||
std::size_t strxfrm( char* dest, const char* src, std::size_t count ); |
||
Преобразует строку байтов с нулевым завершающим символом, на которую указывает src, в форму, определяемую реализацией, так чтобы сравнение двух преобразованных строк с помощью std::strcmp давало тот же результат, что и сравнение исходных строк с std::strcoll в текущей локали C.
Первые count символов преобразованной строки записываются в место назначения, включая завершающий нулевой символ, и возвращается длина полной преобразованной строки, исключая завершающий нулевой символ.
Поведение не определено, если массив dest недостаточно велик. Поведение не определено, если dest и src перекрываются.
Если count равно 0, то dest может быть нулевым указателем.
Содержание |
[править] Примечание
Правильная длина буфера, который может принять всю преобразованную строку, равна 1 + std::strxfrm(nullptr, src, 0).
Эта функция используется при выполнении нескольких сравнений, зависящих от локали, с использованием одной и той же строки или набора строк, поскольку более эффективно использовать std::strxfrm для однократного преобразования всех строк и последующего сравнения преобразованных строк с помощью std::strcmp.
[править] Параметры
dest | — | указатель на первый элемент массива, куда будет записана преобразованная строка |
src | — | указатель на первый символ строки байтов с нулевым завершающим символом для преобразования |
count | — | максимальное количество символов для записи |
[править] Возвращаемое значение
Длина преобразованной строки, не включая завершающий нулевой символ.
[править] Пример
#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 << "В чешской локали: "; if (out1 < out2) std::cout << in1 << " перед " << in2 << '\n'; else std::cout << in2 << " перед " << in1 << '\n'; std::cout << "В лексикографическом сравнении: "; if (in1 < in2) std::cout << in1 << " перед " << in2 << '\n'; else std::cout << in2 << " перед " << in1 << '\n'; }
Возможный вывод:
В чешской локали: hrnec перед chrt В лексикографическом сравнении: chrt перед hrnec
[править] Смотрите также
преобразует широкую строку так, чтобы wcscmp давала тот же результат, что и wcscoll (функция) | |
[virtual] |
преобразует строку так, чтобы сортировки можно заменить сравнение Оригинал: transforms a string so that collation can be replaced by comparison Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::collate функция-элемент)
|
сравнивает две строки в соответствии с текущей локалью (функция) | |
Документация C по strxfrm
|