C语言-字符串函数的实现(四)之strcmp
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语⾔-字符串函数的实现(四)之strcmp
C语⾔中的字符串函数有如下这些
获取字符串长度
strlen
长度不受限制的字符串函数
strcpy
strcat
strcmp
长度受限制的字符串函数
strncpy
strncat
strncmp
字符串查找
strstr
strtok
错误信息报告
strerror
长度不受限制的字符串函数
strcmp
先看看如何使⽤它,对吧
int main()
{
// ⽐较⼀下
char* p1 = "abcdef";
char* p2 = "sqwer";
// 这⾥常量字符串,第⼀个字符的地址赋值给指针
int ret = strcmp(p1, p2);
if (strcmp(p1, p2)>0)
{
printf("p1>p2\n");
}
else if (strcmp(p1, p2) == 0)
{
printf("pa == p2\n");
}
else if (strcmp(p1, p2)<0)
{
printf("p1<p2\n") printf("%d\n", ret);
}
return 0;
}
它是怎么⽐较的?⽐较长度吗?
不,它⽐的不是长度,⽐的是对应字符,a<s,如果第⼀个都是a,那么⽐后⾯的,⼀对⼀对往后⽐
⽼规矩,我们还是看看⽂档是怎样说的,如下
int strcmp ( const char * str1, const char * str2 );
Compare two strings
⽐较两个字符串
Compares the C string str1 to the C string str2.
str1与str2进⾏⽐较
This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.
这个函数以这两个字符串的第⼀个字符开始⽐较,如果它们彼此都相等,那么就会继续⽐较下⼀位字符,直到有字符不同,或者遇到了'\0'就会停⽌⽐较。
This function performs a binary comparison of the characters. For a function that takes into account locale-specific rules, see .
这个函数是以字符的⼆进制来进⾏⽐较的,可以说是以字符的ASCII码来进⾏⽐较。
标准规定:
1. 如果第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
2. 如果第⼀个字符串等于第⼆个字符串,则返回0
3. 如果第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
实现
断⾔指针不为空是个好习惯~
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
//⽐较
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;//相等
}
str1++;
str2++;
}
if (*str1 > *str2)
return 1;//⼤于
else
return -1;//⼩于
}
对于函数参数,因为我们只需要⽐较,不需要对其进⾏修改,所以这⾥的参数就⽤const修饰,防⽌修改。
然后就是进⾏*str1 == *str2,判断
如果值⼀样,那么就要进⾏偏移,即str1++和str2++,使指针往后移动,进⾏下⼀个字符的⽐较,如果⼀直相等,那么直到遇到'\0',就说明⽐较的两个字符串是相等的,直接返回0;
如果值不⼀样了,那么即直接进⾏*str1和*str2的⽐较,*str1 > *str2就返回1,否则返回-1
实际上,可以进⾏优化,最后的判断可以改为做差的形式,来⽐较⼤⼩,就不⽤写if-else了(*str1 - *str2),如下
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
//⽐较
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;//相等
}
str1++;
str2++;
}
return (*str1 - *str2);
}
测试的主函数
int main()
{
char* p1 = "abcdef";
char* p2 = "qwert";
int ret = my_strcmp(p1, p2);
printf("ret = %d\n", ret);
return 0;
}
最后,谢谢你看到这⾥,谢谢你认真对待我的努⼒,希望这篇博客有帮到你
你轻轻⼀个赞,就是我世界⾥的⼀颗星
还有因本⼈⽔平有限,如有错误以及不⾜之处,欢迎靓仔靓⼥们指出。