strcmp实现

strcmp函数实现以及分析

strcmp函数原型

int strcmp(const char str1, const char str2);

str1 < str2 返回负值或-1

str1 == str2 返回0

str1 > str2 返回正值或1

实现原理

该函数实际上是对字符的ASCII码进行比较,实现方案:从前往后依次比较两个字符串的字符,如果不相等,就停止比较并返回结果,如果相等就继续,直到其中一个字符串遇到结束符’\0’为止。

Linux源码
1
2
3
4
5
6
7
8
9
10
int strcmp(const char* str1, const char* str2){
unsigned char c1, c2;
while(1){
c1 = *str1++;
c2 = *str2++;
if(c1 != c2) return (c1 < c2) ? -1 : 1;
if(!c1) break;
}
return 0;
}

自己用减法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int strcmpNew2(const char* str1, const char* str2) {
int ret = 0;
while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str1) {
str1++;
str2++;
}
return ret;

//if (ret < 0){
// return -1;
//}
//else if (ret > 0){
// return 1;
//}
//return 0;
}
注意

这个函数体内没有判断参数为NULL时的情况,所以当传入NULL时程序会崩溃,中的strcmp也会崩溃

本文标题:strcmp实现

文章作者:Tokey

发布时间:2020年04月28日 - 09:04

最后更新:2020年04月28日 - 15:04

原始链接:http://TokeyRoad.github.io/2020/04/28/strcmp实现/

许可协议: 转载请保留原文链接及作者。

0%