原型:
int strcmp( const char *str1, const char *str2);str1和str2均为要比较的字符串或者字符数组
功能:
比较两个字符串的大小,比较方法是:自左向右逐个字符地比较两个字符串的大小(以ASCII值表为顺序依据,如'a'比'A'大),直到出现不同的字符或者'\0'时返回。头文件:
string.h返回值:
= 0 : 两个字符串上的字符完全相同,即字符串str1与字符串str2中对应的位置上的字符相等并且字符串长度一样。< 0 : 两个字符串中,第一个不匹配的字符使得str1[x] < str2[x],或者str1的前strlen(str1)个字符与str2的前strlen(str1)个字符相同,但strlen(str1) < strlen(str2)。
> 0 : 两个字符串中,第一个不匹配的字符使得str1[x] > str2[x],或者str1的前strlen(str1)个字符与str2的前strlen(str1)个字符相同,但strlen(str1) > strlen(str2)。
说明:
1、函数参数只能是字符串,可以是数组或者字符串常量,不能是其他类型的参数。2、字符比较是自左向右的,并且是按照ASCII表中的顺序进行大小比较的,表中靠前的字符的值比靠后的字符值小。
3、当两个字符串中有一个到达字符串结束符'\0'时或遇到有不相同的字符时,函数返回。
4、ANSI标准规定,返回值为正数,负数,0。而有些编译器实现的返回值是两个不同的字符ASCII值的差。
strcmp函数的C语言实现代码:
/*返回值可能为正数,0,负数三种之一,下面实现采用1表示>, 0表示=, -1表示<*/int strcmp( const char *str1, const char *str2)
{
while( (*str1 == *str2) && (*str1 != '\0') && (*str2 != '\0'))
{
str1 ++;
str2 ++;
}
if( *str1 == *str2)
return 0;
else if( *str1 > *str2)
return 1;
else
return -1;
}
例程:
char *a = "QaBcDeF";char *b = "QaBcDeF";
char *c = "QABcDeF";
char *d = "qaBcDeF";
printf("strcmp(a, b) : %d\n", strcmp(a, b));
printf("strcmp(a, c) : %d\n", strcmp(a, c));
printf("strcmp(a, d) : %d\n", strcmp(a, d));
输出结果为:
strcmp(a, b) : 0strcmp(a, c) : 1
strcmp(a, d) : -1
相关函数:
strncmp
函数原型:
int strncmp( const char *str1, const char *str2, size_t len);
功能:
比较两个字符串的大小,方法和strcmp一样,不过strncmp最多只比较两个字符串中的前len个字符。
memcmp
函数原型:
int memcmp( const void *ptr1, const void *ptr2, size_t len);
功能:
比较ptr1和ptr2分别指向的两块内存中的前len个字节的值。
strcoll
函数原型:
int strcoll( const char *str1, const char *str2);
功能:
strcoll() 会依环境变量 LC_COLLATE 所指定的文字排列次序来比较 str1 和 str2 字符串。 默认情况下,LC_COLLATE 为"POSIX"或"C",strcoll() 和 strcmp() 一样根据ASCII比较字符串大小。对于设置了LC_COLLATE 语言环境的情况下,则根据LLATE 设置的语言排序方式进行比较。例如,汉字会根据拼音进行比较。若字符串 str1 和 str2 相同则返回0。若 str1 大于 str2 则返回大于 0 的值,否则返回小于 0 的值。