目录
strcmp
strcmp
是 C 语言标准库中的一个函数,用于比较两个字符串。它的原型定义在 <string.h>
头文件中。strcmp
函数通过比较字符串中对应位置的字符的 ASCII 值来比较两个字符串。比较是逐字符进行的,直到遇到不同的字符或遇到字符串的终止符 \0
为止。
函数原型如下:
int strcmp(const char *str1, const char *str2);
str1
和str2
是要比较的两个字符串的指针。- 函数返回一个整数,该整数的符号表明了
str1
和str2
的字典序关系:- 如果返回值
< 0
,则str1
小于str2
。 - 如果返回值
== 0
,则str1
等于str2
。 - 如果返回值
> 0
,则str1
大于str2
。
- 如果返回值
示例
#include<stdio.h>
#include<string.h>
int main()
{
char *str1 = "muchangong";
char *str2 = "muchangong";
int ret;
ret = strcmp(str1,str2);
printf("ret = %d\n",ret);
return 0;
}
输出
ret = 0
注意事项
strcmp
是区分大小写的。- 当比较字符串时,直到遇到第一个不同的字符或直到任一字符串的结束符
\0
为止。 - 如果
str1
或str2
是NULL
,则行为是未定义的。在调用strcmp
之前,确保字符串指针是有效的。 - 在某些情况下,如果性能是一个关键因素,并且你知道字符串可能很长且大部分相同,考虑使用
strncmp
函数来比较字符串的前n
个字符,以减少比较所需的时间。
strcmp自实现代码:
int myStrcmp(char *str1,char *str2)
{
int ret;
while(*str1 && *str2 && (*str1 == *str2)){
str1++;
str2++;
}
ret = *str1 - *str2;
if(ret>0){
ret = 1;
}
if(ret<0){
ret = -1;
}
return ret;
}
strncmp 函数
strncmp
函数用于比较两个字符串的前 n 个字符。
-
函数原型:
int strncmp(const char *s1, const char *s2, size_t n);
-
参数:
s1
:指向要比较的第一个字符串的指针。s2
:指向要比较的第二个字符串的指针。n
:要比较的最大字符数。
-
返回值:
- 如果两个字符串的前 n 个字符完全相同,则返回 0。
- 如果第一个不相同的字符在
s1
中出现在s2
中之前(按 ASCII 值比较),则返回一个小于 0 的值。 - 如果第一个不相同的字符在
s2
中出现在s1
中之前,则返回一个大于 0 的值。
-
特点:
- 区分大小写。
- 只比较前 n 个字符,这允许对较长的字符串进行部分比较,或者在不确定整个字符串长度时进行比较。
两者之间的区别和联系
- 区别:
strcmp
比较整个字符串,直到遇到终止符\0
。strncmp
只比较字符串的前 n 个字符。
- 联系:
- 两者都用于比较字符串。
- 两者都区分大小写。
- 两者都返回整数值来表示比较结果(0 表示相等,小于 0 表示第一个字符串小于第二个字符串,大于 0 表示第一个字符串大于第二个字符串)。
在实际编程中,选择 strcmp
还是 strncmp
取决于具体的需求。如果需要比较整个字符串,则使用 strcmp
;如果只需要比较字符串的前部分,或者不确定整个字符串的长度,则使用 strncmp
。