strcmp函数比较的不是字符串的长度,strcmp比较的是对应位置上字符的大小(ASCII值),如果不相同就比较下一对,直到源字符串没有元素为止,如果源字符串上的字符比目的字符串的字符大就返回大于零的数,如果比较小,就返回小于0的数,如果相同就返回0。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* s1, const char* s2) {
assert(s1 && s2);
while (*s1 == *s2) {
if (*s1 == '\0') {
return 0;//相等
}
s1++;
s2++;
}
//不相等
return *s1 - *s2;
}
int main() {
char arr1[] = "abcd";
char arr2[] = "abcde";
//strcmp函数不是比较字符串的长度
//而是比较字符串中对应位置上的字符的大小,如果相同就比较下一个,直到最后一个元素
int ret = my_strcmp(arr1, arr2);
if (ret > 0) {
printf("> \n");
}
else if (ret == 0) {
printf("== \n");
}
else {
printf("> \n");
}
printf("%d\n",ret);
return 0;
}
1.模拟实现strcmp函数 在vis中默认的strcmp函数如果大于则返回1,小于则返回-1,等于则返回0。
2.所以我们可以在主函数中使用if判断一下.调用使用my_strcmp函数,首先不需要改变我们的*s1和*s2所以可以增加const修饰,然后进行断言指针不为空。 当我们的*s1和*s2相同的情况下,两个数就++一直判断后面的情况,如果不同的话直接返回*s1-*s2就相当于对*s1中和*s2中的不同的那个字符解应用.直接相减,如果大于则返回大于的函数,如果小于则返回小于的函数.
3.当我们的函数一直保持在相同时,我们的*s2会一直走到\0这个位置,此时我们只要判断*s1为\0就可以得出想要的结果了.
!!!!!!!!
strcpy
strcat
strcmp
以上三个都为长度不受限制的字符串函数,这三个函数只管进行,不管内容;让他做就直接开干,不管溢不溢出,不管越不越界.只要快就完事了.
接下来 认识一下
strncpy
strncat
stcncmp
以上三个为长度受限制的字符串函数~