strcmp() 用来比较字符串(区分大小写),其原型为:
int strcmp(const char *s1, const char *s2);
【参数】s1, s2 为需要比较的两个字符串。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。但是并不是所有系统都返回差值,有的系统只返回0,1和-1三个值。
【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。
注意,strcmp()可以比较所有的字符,不只是字母。
注意:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,请使用 strcoll() 函数。
在有的系统中,按ASCII表中,如果第一个字符串在第二个字符串前面,则返回负数;如果两个字符串相同则返回0;如果第一个字符串在第二个字符串后面,返回正数。
注意,不同的系统返回值有可能不一样,取决于系统的实现。有的系统分别返回-1,0,1。在另外的一些系统中,有可能值返回ASCII的差值。
示例:
/* compback.c -- strcmp returns */
#include
#include
int main(void)
{
printf("strcmp(\"A\", \"A\") is ");
printf("%d\n", strcmp("A", "A"));
printf("strcmp(\"A\", \"B\") is ");
printf("%d\n", strcmp("A", "B"));
printf("strcmp(\"B\", \"A\") is ");
printf("%d\n", strcmp("B", "A"));
printf("strcmp(\"C\", \"A\") is ");
printf("%d\n", strcmp("C", "A"));
printf("strcmp(\"Z\", \"a\") is ");
printf("%d\n", strcmp("Z", "a"));
printf("strcmp(\"apples\", \"apple\") is ");
printf("%d\n", strcmp("apples", "apple"));
return 0;
}
例如上面程序在我的系统中输出如下:
strcmp("A", "A") is 0
strcmp("A", "B") is -1
strcmp("B", "A") is 1
strcmp("C", "A") is 1
strcmp("Z", "a") is -1
strcmp("apples", "apple") is 1
在另外一些系统实现中,返回两个字符的差值:
strcmp("A", "A") is 0
strcmp("A", "B") is -1
strcmp("B", "A") is 1
strcmp("C", "A") is 2
strcmp("Z", "a") is -7
strcmp("apples", "apple") is 115
大多数情况下,strcmp()返回的具体值并不重要,我们通常只在意该值是0还是非0(即比较的两个字符串是否相等)。或者案子福排序字符串,在这种情况下,需要知道比较的结果为正、为负还是为0.
strncmp() 用来比较两个字符串的前n个字符,区分大小写,其原型为:
int strncmp ( const char * str1, const char * str2, size_t n );
【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志’\0’,若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和’b’(98)的差值(-33)。
注意:要比较的字符包括字符串结束标志’\0’,而且一旦遇到’\0’就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。
注意:如果两个字符不同,GCC返回该字符对应的ASCII码的差值,VC返回-1或1。但是让人为难的是,strnicmp()、strcmp()、stricmp()在GCC和VC下都返回-1或1,而不是ASCII的差值。
示例:
例如,要查找以"astro"开头的字符串,可以限定函数只查找这5个字符。
/* starsrch.c -- use strncmp() */
#include
#include
#define LISTSIZE 6
int main()
{
const char * list[LISTSIZE] =
{
"astronomy", "astounding",
"astrophysics", "ostracize",
"asterism", "astrophobia"
};
int count = 0;
int i;
for (i = 0; i < LISTSIZE; i++)
if (strncmp(list[i],"astro", 5) == 0)
{
printf("Found: %s\n", list[i]);
count++;
}
printf("The list contained %d words beginning"
" with astro.\n", count);
return 0;
}
下面是该程序的输出
Found: astronomy
Found: astrophysics
Found: astrophobia
The list contained 3 words beginning with astro.
参考资料:
[1] 史蒂芬・普拉达. C Primer Plus (第6版) 中文版[M]. 人民邮电出版社, 2016.
[2] C语言strcmp()函数:比较字符串(区分大小写)-来源
[3] C语言strncmp()函数:比较字符串的前n个字符(区分大小写)-来源