Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::strxfrm(3)		      C++ Standard Libary	       std::strxfrm(3)

NAME
       std::strxfrm - std::strxfrm

Synopsis
	  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.

	  The behavior is undefined if the dest	array is not large enough. The
       behavior	is
	  undefined if dest and	src overlap.

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

Notes
	  The correct length of	the buffer that	can receive the	entire	trans-
       formed string is
	  1+std::strxfrm(nullptr, src, 0)

	  This	function is used when making multiple locale-dependent compar-
       isons using the
	  same string or set of	strings, because it is more efficient  to  use
       std::strxfrm to
	  transform  all  the  strings just once, and subsequently compare the
       transformed
	  strings with std::strcmp.

Parameters
	  dest	- pointer to the first element of the array where  the	trans-
       formed 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

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

Example
       // Run this code

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

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

	}

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

See also
		       transform  a  wide  string so that wcscmp would produce
       the same	result as
	  wcsxfrm      wcscoll
		       (function)
	  do_transform transforms a string so that collation can  be  replaced
       by comparison
	  [virtual]	 (virtual   protected  member  function	 of  std::col-
       late<CharT>)
	  strcoll      compares	two strings in accordance to the  current  lo-
       cale
		       (function)

http://cppreference.com		  2022.07.31		       std::strxfrm(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::strxfrm&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help