当前位置: C语言 -- 标准库 -- <string.h> -- strcoll

strcoll函数


概要:
#include <string.h>
int strcoll(const char *s1, const char *s2);

描述:

该函数根据当前语言环境LC_COLLATE类别定义的排序顺序比较参数s1指向字符串和参数s2指向字符串的大小。

每种语言都有一套规则规定:如何将字符串排序到有序列表中。排序规则是指如何确定字符串的排序顺序。排序规则是字典顺序。当前语言环境的LC_COLLATE类别提供了排序规则的定义。

标准"C"语言环境中,字符集顺序和字典编纂字符顺序相同,这种情况下对于相同的字符串调用strcoll函数与调用strcmp函数的结果相同。

有些语言环境中,字符集顺序和字典编纂字符顺序存在差异,这种情况下对于相同的字符串调用strcoll函数与调用strcmp函数的结果可能存在差异。这种情况下如果要执行按字典顺序比较,应使用strcoll函数。

具体实现中,strcoll函数可能会隐式地将多字节字符串中的字符映射为字节序列(该字节序列表示字符串在当前语言环境排序序列中的位置。),然后比较字节序列。


参数:
const char *s1

指向字符串的指针。

const char *s2

指向字符串的指针。


返回值:

根据参数s1指向字符串是大于、等于还是小于参数s2指向字符串,函数返回一个大于、等于或者小于0的整数。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
/*函数strcoll范例*/

#include <locale.h>
#include <stdio.h>
#include <string.h>

void compareString(const char *strOne, const char *strTwo)
{
    int value;

    value = strcoll(strOne, strTwo);
    if(value>0)
        puts("strOne is greater than strTwo.");
    else if(value<0)
        puts("strOne is less than strTwo.");
    else
        puts("strOne is equal to strTwo.");
}

int main(void)
{
    const char strOne[] = "string";
    const char strTwo[] = "String";

    printf("Current locale: %s\n", setlocale(LC_COLLATE, NULL));
    compareString(strOne, strTwo);

    setlocale(LC_COLLATE, "");
    printf("Current locale: %s\n", setlocale(LC_COLLATE, NULL));
    compareString(strOne, strTwo);

    return 0;
}


输出:

Current locale: C

strOne is greater than strTwo.

Current locale: Chinese (Simplified)_China.936

strOne is less than strTwo.


相关内容:
memcmp 比较内存区域字符序列的函数。
strcmp 比较字符串的函数。
strncmp 比较字符串前n个字符的函数。
strxfrm 转换字符串的函数。