C语言程序设计笔记---025
C语言之模拟实现strcmp函数
前言:
通过C语言字符串函数的知识,这篇将对strcmp函数进行深入学习底层原理的知识,并模拟实现对应功能。
/知识点汇总/
1、介绍strcmp函数
函数原型 :int strcmp( const char *string1, const char *string2 );
函数功能 :字符串比较大小(不是比较长度,而是比较对应位置上的字符大小,即ASCII码值),返回值类型为int
头文件 :<string.h>
返回值标准规定 :ASCLL码值
①.第一个字符串大于第二个字符串,则返回大于0的数字
②.第一个字符串等于第二个字符串,则返回0
③.第一个字符串小于第二个字符串,则返回小于0的数字
使用注意事项 :
不是比较长度,而是比较对应位置上的字符大小,即ASCII码值
示例代码1如下:
c
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abq";
int ret = strcmp(arr1, arr2);
printf("%d\n", ret);//-1,第一个字符串比第二个字符串小,返回小于零的数值
return 0;
}
2、模拟实现strcmp函数
c
#include <stdio.h>
#include <string.h>
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 arr1[] = "abc";
char arr2[] = "abq";
if (my_strcmp(arr1, arr2) > 0)
{
printf(">\n");
}
else
{
printf("<=\n");
}
return 0;
}
解释说明 :
1.assert是断言,参数为指针,防止传参过来是空指针避免野指针的问题
2.当*str1 == *str2则指针继续移动,直到出现不同的字符后,用指针解引用后的值相减,也就是字符的ASCII码值相减,得到的值正好也满足返回值类型int
3、结语
学习函数的最实用的方式就是用自己的逻辑简单实现一些类似的功能
半亩方糖一鉴开,天光云影共徘徊。
问渠哪得清如许?为有源头活水来。--朱熹(观书有感)