C语言中有一些我们常用的库函数,所以我们介绍一下常用的几个库函数。
strlen
strcmp
strcat
strcpy
strstr
先介绍一下这些函数的主要功能以及参数和返回值等
strlen
strlen主要用来计算字符串的长度,所以他的参数是一个char类型的字符指针,返回值是一个无符号整形
下面我们就介绍一下如何实现,以及使用
strlen是遇到\0 就停止,所以我们可以解引用查看是否为\0,如果不是则让计数器+1直到遇到\0为止
下面是实现的源码
size_t my_strlen(char* arr)
{
assert(arr);
size_t count = 0;
while (*arr != '\0')
{
++arr;
++count;
}
return count;
}
下面是strcpy
他的参数是两个字符指针,把source里面的内容拷贝到destination里面,然后返回拷贝后的指针
strcpy是把一个字符串拷贝到另一个字符串中,直到结束就停止拷贝,所以说遇到\0就截止,下面是源码
char* my_strcpy(char* arr, const char* arr2)
{
assert(arr && arr2);
char* ret = arr;
while (*arr2 != '\0')
{
*arr++ = *arr2++;
}
return ret;
}
strcat
strcat是用来字符串连接的,首先是找到目标字符串的\0然后将想要连接的字符串连接上即可
下面介绍一下如何实现
首先得找到目标字符串的\0位置,然后将要连接的字符串 从\0的位置开始连接,直到遇到连接的字符串的\0
下面是源码
char* my_strcat(char* arr1, const char* arr2)
{
assert(arr1 && arr2);
char* ret = arr1;
while (*arr1 != '\0')
{
++arr1;
}
while (*arr1++ = *arr2++)
{
;
}
}
strcmp
strcmp是用来比较两个字符串的,他的参数是两个字符指针,返回值是一个int类型的值,如果str1字符串大于str2返回大于0的值,相等的话返回0 str2 大于str1的话返回小于0的值
下面介绍一下如何实现
下面是源码
int my_strcmp(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
while (*arr1 != '\0' && *arr2 != '\0')
{
if (arr1 != '\0' && arr2 != '\0' && *arr1 > *arr2)
{
return 1;
}
else if (arr1 != '\0' && arr2 != '\0' && *arr1 < *arr2)
{
return -1;
}
if (arr1 != '\0' && arr2 != '\0')
{
++arr1;
++arr2;
}
}
if (*arr1 == '\0' && *arr2 != '\0')
{
return -1;
}
if (*arr1 != '\0' && *arr2 == '\0')
{
return 1;
}
return 0;
}
strstr
strstr是在一个字符串中查找另一个字符串,
参数是两个字符串指针,返回值是一个字符指针,如果找到了则返回第一个找到的地址,找不到返回空指针
下面介绍一下如何实现
下面是源码
char* my_strstr(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
char* s1 = arr1;
char* s2 = arr2;
if (*arr2 == '\0')
{
return arr1;
}
char* cp = arr1;
while (*cp != '\0')
{
s1 = cp;
s2 = arr2;
while (*s1 != '\0' && *s2 != '\0' && * s1 == *s2)
{
++s1;
++s2;
}
if (*s2 == '\0')
{
return cp;
}
++cp;
}
return NULL;
}