文章目录
- strcmp函数:
- 例1:`str2`前6个元素和`str1`一样,多了一个G。
- 例2:第3个字母不同,str2元素也比str1多个G。
- 例3:第3个字母不同,str2元素也比str1少个f。
- 例4:第3个字母不同,str2元素也比str1少个f。
- 例5:第3个字母不同,str2元素也比str1多个G。
- 例6:str2元素和str1元素相同。
- 结论:
strcmp函数:
这个函数定义在 <string.h>
头文件中,因此在使用 strcmp
函数之前,需要包含这个头文件。
strcmp
函数的原型如下:
int strcmp(const char *str1, const char *str2);
参数说明:
str1 :指向第一个字符串的指针。
str2 :指向第二个字符串的指针。
返回值:
1.str1>str2:返回正数
2.str1<str2:返回负数
3.str1==str2:返回0
strcmp
函数通过比较两个字符串的字符来工作。它从两个字符串的第一个字符开始比较,如果相同则继续比较下一个字符,直到找到不同的字符或者到达字符串的结尾。比较是基于字符的字典顺序进行的,即使用 ASCII 值来比较字符。
需要注意的是, strcmp
函数只比较字符串的内容,不比较字符串的长度。如果两个字符串在某个位置上的字符不同,那么 strcmp
将根据这些字符的 ASCII 值来返回比较结果,而不会继续比较后续的字符。
接下来,我举几个例子来方便理解。
例1:str2
前6个元素和str1
一样,多了一个G。
int main() {char str1[] = "ancdef";char str2[] = "ancdefG";int ret = strcmp(str1, str2);printf("%d\n", ret);return 0;
}
打印:
返回负数,说明str1<str2
。
在这里,strcmp是先比较两个数组第一个元素 ,发现一样继续比较;然后比较两个数组第二个元素,发现一样继续比较。
直到strcmp函数遇到str1
第七个元素/0
,说明str1
结束了,而str2
没结束,所以说明str1<str2
,返回负数。
例2:第3个字母不同,str2元素也比str1多个G。
int main() {char str1[] = "ancdef";char str2[] = "anddefG";int ret = strcmp(str1, str2);printf("%d\n", ret);return 0;
}
打印:
返回负数,说明str1<str2
。
在这里,strcmp是先比较两个数组第一个元素 ,发现一样继续比较;然后比较两个数组第二个元素,发现一样继续比较。
直到str2
第3个元素d
和str1
第3个元素c
比较ASCII
后,d
的ASCII
大于c
的ASCII
,所以说明str1<str2
,返回负数。
不会去比较后面的了。
例3:第3个字母不同,str2元素也比str1少个f。
int main() {char str1[] = "ancdef";char str2[] = "andde";int ret = strcmp(str1, str2);printf("%d\n", ret);return 0;
}
打印:
返回负数,说明str1<str2
。
在这里,strcmp是先比较两个数组第一个元素 ,发现一样继续比较;然后比较两个数组第二个元素,发现一样继续比较。
直到str2
第3个元素d
和str1
第3个元素c
比较ASCII
后,d
的ASCII
大于c
的ASCII
,所以说明str1<str2
,返回负数。
不会去比较后面的了。
例4:第3个字母不同,str2元素也比str1少个f。
int main() {char str1[] = "anedef";char str2[] = "andde";int ret = strcmp(str1, str2);printf("%d\n", ret);return 0;
}
打印:
返回负数,说明str1>str2
。
在这里,strcmp是先比较两个数组第一个元素 ,发现一样继续比较;然后比较两个数组第二个元素,发现一样继续比较。
直到str2
第3个元素d
和str1
第3个元素e
比较ASCII
后,d
的ASCII
小于e
的ASCII
,所以说明str1>str2
,返回正数。
不会去比较后面的了。
例5:第3个字母不同,str2元素也比str1多个G。
int main() {char str1[] = "anedef";char str2[] = "anddefG";int ret = strcmp(str1, str2);printf("%d\n", ret);return 0;
}
打印:
返回负数,说明str1>str2
。
在这里,strcmp是先比较两个数组第一个元素 ,发现一样继续比较;然后比较两个数组第二个元素,发现一样继续比较。
直到str2
第3个元素d
和str1
第3个元素e
比较ASCII
后,d
的ASCII
小于e
的ASCII
,所以说明str1>str2
,返回正数。
不会去比较后面的了。
例6:str2元素和str1元素相同。
int main() {char str1[] = "ancdef";char str2[] = "ancdef";int ret = strcmp(str1, str2);printf("%d\n", ret);return 0;
}
打印:
直到strcmp函数遇到str1
第七个元素/0
和str2
第七个元素/0
。
说明str1
和str2
都结束了,所以说明str1=str2
,返回0。
结论:
所以说,strcmp
函数不是简单比较两个数组元素数量的函数,而是按位比较数组元素,根据两数组对应元素出现的第一组变化来比较‘大小’
进行输出的。
strcmp
遇到\0
就会停止。而不是说会比较两个\0
。
str2
第七个元素/0
。
说明str1
和str2
都结束了,所以说明str1=str2
,返回0。
求三连~