名前空間
変種
操作

std::strxfrm

提供: cppreference.com
< cpp‎ | string‎ | byte
ヘッダ <cstring> で定義
std::size_t strxfrm(char* dest, constchar* src, std::size_t count );

現在の C のロケールにおいて、 std::strcoll で2つの文字列を比較したのと同じ結果を std::strcmp で変換後の2つの文字列を比較することで得られるように、 src の指すヌル終端バイト文字列を処理系定義の形式に変換します。

変換後の文字列の最初の count 個の文字 (終端のヌル文字を含む) が dest に書き込まれ、完全な変換後の文字列の長さ (終端のヌル文字を除く) が返されます。

dest 配列が十分大きくない場合、動作は未定義です。 destsrc がオーバーラップしている場合、動作は未定義です。

count0 の場合、 dest はヌルポインタでも構いません。

目次

[編集]ノート

変換後の文字列全体を受け取れるバッファの正しい長さは 1+std::strxfrm(nullptr, src, 0) です。

この関数は同じ文字列または文字列の集合を使用してロケール依存の比較を複数回行うときに使用されます。 std::strxfrm を使用してすべての文字列を一度だけ変換し、その後 std::strcmp を使用して変換後の文字列を比較すると効率的です。

[編集]引数

dest - 変換後の文字列を書き込む配列の最初の要素を指すポインタ
src - 変換するヌル終端バイト文字列の最初の文字を指すポインタ
count - 書き込む最大文字数

[編集]戻り値

終端のヌル文字を含まない変換後の文字列の長さ。

[編集]

#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';elsestd::cout<< in2 <<" before "<< in1 <<'\n';   std::cout<<"In lexicographical comparison: ";if(in1 < in2)std::cout<< in1 <<" before "<< in2 <<'\n';elsestd::cout<< in2 <<" before "<< in1 <<'\n';   }

出力:

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

[編集]関連項目

wcscoll と同じ結果を wcscmp で得られるようにワイド文字列を変換します
(関数)[edit]
[仮想]
照合を比較に置き換えられるように文字列を変換します
(std::collate<CharT>の仮想プロテクテッドメンバ関数)[edit]
現在のロケールに従って2つの文字列を比較します
(関数)[edit]
close