##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::strxfrm

From cppreference.com
< cpp‎ | string‎ | byte

Defined in header `<cstring>` |  |
std::size_t strxfrm( char* dest, const char* src, std::size_t count ); |  |

Transforms the null-terminated byte string pointed to by `src` into the implementation-defined form such that comparing two transformed strings with std::strcmp gives the same result as comparing the original strings with std::strcoll, in the current C locale.

The first `count` characters of the transformed string are written to destination, including the terminating null character, and the length of the full transformed string is returned, excluding the terminating null character.

If `count` is ​0​, then `dest` is allowed to be a null pointer.

### [edit] Notes

The correct length of the buffer that can receive the entire transformed string is 1+std::strxfrm(NULL, src, 0)

### [edit] Parameters

dest | - | pointer to the first element of the array where the transformed string will be written
src | - | pointer to the first character of a null-terminated byte string to transform
count | - | maximum number of characters to be written

### [edit] Return value

The length of the transformed string, not including the terminating null-character.

### [edit] Example

Run this code

    #include <iostream>
    #include <iomanip>
    #include <cstring>
    #include <string>

    int main()
    {
        std::setlocale(LC_COLLATE, "cs_CZ.iso88592");

        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';

    }

Output:

    In the Czech locale: hrnec before chrt
    In lexicographical comparison: chrt before hrnec

### [edit] See also

wcsxfrm | transform a wide string so that wcscmp would produce the same result as wcscoll (function) [edit]
do_transform [virtual] | transforms a string so that collation can be replaced by comparison (virtual protected member function of `std::collate`) [edit]
strcoll | compares two strings in accordance to the current locale (function) [edit]
C documentation for strxfrm

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/string/byte/strxfrm&oldid=69168"