std:: strxfrm
|
헤더 파일에 정의됨
<cstring>
|
||
|
std::
size_t
strxfrm
(
char
*
dest,
const
char
*
src,
std::
size_t
count
)
;
|
||
src 가 가리키는 널 종료 바이트 문자열을 구현 정의 형태로 변환하여, 현재 C 로케일에서 std::strcmp 로 변환된 두 문자열을 비교하는 것이 원본 문자열을 std::strcoll 로 비교하는 것과 동일한 결과를 제공하도록 합니다.
변환된 문자열의 첫 번째 count 개의 문자는 종료 널 문자를 포함하여 대상에 기록되며, 전체 변환된 문자열의 길이는 종료 널 문자를 제외하고 반환됩니다.
dest 배열이 충분히 크지 않을 경우 동작은 정의되지 않습니다. 동작은 정의되지 않습니다 만약 dest 와 src 가 겹치는 경우.
만약 count 가 0 이면, dest 는 null 포인터가 허용됩니다.
목차 |
참고 사항
전체 변환된 문자열을 수신할 수 있는 올바른 버퍼의 길이는 1 + std :: strxfrm ( nullptr, src, 0 ) 입니다.
이 함수는 동일한 문자열 또는 문자열 집합을 사용하여 여러 로케일 의존 비교를 수행할 때 사용됩니다. 왜냐하면 모든 문자열을 한 번만 변환하기 위해 std::strxfrm 을 사용하고, 이후 변환된 문자열들을 std::strcmp 로 비교하는 것이 더 효율적이기 때문입니다.
매개변수
| dest | - | 변환된 문자열이 기록될 배열의 첫 번째 요소를 가리키는 포인터 |
| src | - | 변환할 null 종료 바이트 문자열의 첫 번째 문자를 가리키는 포인터 |
| count | - | 기록될 최대 문자 수 |
반환값
변환된 문자열의 길이로, 종료 널 문자는 포함하지 않습니다.
예제
#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
와 동일한 결과를 생성하도록 함
(함수) |
|
|
[virtual]
|
문자열을 변환하여 비교로 콜레이션을 대체할 수 있도록 함
(
std::collate<CharT>
의 가상 protected 멤버 함수)
|
|
현재 로캘에 따라 두 문자열을 비교함
(함수) |
|
|
C documentation
for
strxfrm
|
|