名稱空間
變體
操作

std::strxfrm

來自 cppreference.com
< cpp‎ | string‎ | byte
在標頭檔案 <cstring> 中定義
std::size_t strxfrm( char* dest, const char* src, std::size_t count );

src 指向的以 null 結尾的位元組字串轉換為實現定義的形式,使得使用 std::strcmp 比較兩個轉換後的字串的結果與在當前 C 語言環境中,使用 std::strcoll 比較原始字串的結果相同。

轉換後字串的前 count 個字元(包括終止 null 字元)寫入目標位置,並返回完整轉換後字串的長度,不包括終止 null 字元。

如果 dest 陣列不夠大,則行為未定義。如果 destsrc 重疊,則行為未定義。

如果 count0,則 dest 可以是空指標。

目錄

[編輯] 注意

能夠接收完整轉換後字串的正確緩衝區長度是 1 + std::strxfrm(nullptr, src, 0)

當使用相同字串或字串集進行多次與語言環境相關的比較時,會使用此函式,因為使用 std::strxfrm 一次性轉換所有字串,然後使用 std::strcmp 比較轉換後的字串會更高效。

[編輯] 引數

dest - 指向將寫入轉換後字串的陣列的第一個元素的指標
src - 指向要轉換的以 null 結尾的位元組字串的第一個字元的指標
count - 要寫入的最大字元數

[編輯] 返回值

轉換後字串的長度,不包括終止 null 字元。

[編輯] 示例

#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 << "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';
}

可能的輸出

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

[編輯] 另請參閱

轉換寬字串,使 wcscmp 產生與 wcscoll 相同的結果
(函式) [編輯]
[虛擬函式]
轉換字串,以便整理可以透過比較來替代
(std::collate<CharT> 的虛保護成員函式) [編輯]
根據當前區域設定比較兩個字串
(函式) [編輯]
C 文件 關於 strxfrm