Пространства имён
Варианты
Действия

std::strxfrm

Материал из cppreference.com
< cpp‎ | string‎ | byte
 
 
 
Однобайтовые строки с завершающим нулём
Функции
Манипуляции с символами
Преобразование в числовые форматы
(C++11)(C++11)
(C++11)(C++11)
Манипуляции со строками
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 функция-элемент) [править]
сравнивает две строки в соответствии с текущей локалью
(функция) [править]