std::strxfrm
來自 cppreference.com
在標頭檔案 <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 陣列不夠大,則行為未定義。如果 dest 和 src 重疊,則行為未定義。
如果 count 為 0,則 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
|