배시 매뉴얼 말한다
사용할 때 [상기 < 및> 연산자 그래서 현재의 로케일을 사 전적으로 사용하고 있습니다. 테스트 명령은 ASCII 순서를 사용하여 정렬합니다.
이것은 각각 strcoll (3) 또는 strcmp (3)을 사용하는 것으로 귀결됩니다.
이를 테스트하려면 다음 프로그램 (strcoll_strcmp.c)를 사용
#include <stdio.h>
#include <string.h>
#include <locale.h>
int main(int argc, char **argv)
{
setlocale(LC_ALL, "");
if (argc != 3) {
fprintf(stderr, "Usage: %s str1 str2\n", argv[0]);
return 1;
}
printf("strcoll('%s', '%s'): %d\n",
argv[1], argv[2], strcoll(argv[1], argv[2]));
printf("strcmp('%s', '%s'): %d\n",
argv[1], argv[2], strcmp(argv[1], argv[2]));
return 0;
}
주 차이 :이 같은 비교 왜
$ LC_ALL=C ./strcoll_strcmp ' a' '0a'
strcoll(' a', '0a'): -16
strcmp(' a', '0a'): -16
$ LC_ALL=en_US.UTF-8 ./strcoll_strcmp ' a' '0a'
strcoll(' a', '0a'): 10
strcmp(' a', '0a'): -16
가 정확히 잘 모르겠어요합니다. 이것은 영어 사전 편집 규칙에 기인합니다. 정확한 규칙은
ISO 14651 Method for comparing character strings and description of the common template tailorable ordering과 그에 수반되는 템플릿 테이블에 설명되어 있다고 생각합니다. Glibc는이 데이터를 소스 트리에
libc/localedata/locales
아래에 포함합니다.
왜 하나의 공간 '은'두 경우 모두에서보다 적은? – updogliu
@updogliu 내 답변 하단에 추가 사항을 확인하십시오. – spbnick
몇 가지 사례를 시도했습니다. 선행 공백은 단순히'strcoll'에서 버려진 것 같습니다. – updogliu