1.模拟strlen函数的实现
创造一个函数用递归来计算字符串长度,使用递归的方法进行计算
#include<stdio.h>
#include<assert.h>
//模拟strlen
size_t my_strlen( const char* arr)//使用const以保证arr数组内容不被改变
{
assert(arr); //assert来判断arr数组是否为有效数组
if (*arr == '\0')
return 0;
else
return 1 + my_strlen(arr + 1);//每次arr都加一直到遇见'\0'停止
}
int main()
{
char arr[] = "abcdefg";
size_t len = my_strlen(arr);//将arr数组首元素传给my_strlen函数
printf("%zd", len);
return 0;
}
2.模拟strcpy函数的实现
这里模拟的strcpy函数形式与库函数strcpy函数的形式一致
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* arr2, const char* arr1)//strcpy函数的返回值为char*类型,模拟一致
{
char* ret = arr1; //创建ret指针指向arr1首元素以便返回时指向首元素
assert(arr1 && arr2); //判断arr1与arr2都为有效数组
while (*arr2++ = *arr1++) //将arr1的每一个字符都传给arr2先引用再++处理直到
{ //'\0'='\0'时while循环终止
;
}
return ret; //返回ret即arr1中的首元素地址,这与atrcpy函数返回
一样
}
int main()
{
char arr1[] = "hello world!";
char arr2[] = "xxxxxxxxxxxx";
my_strcpy(arr2, arr1);
printf("%s", arr2);
return 0;
}
3.模拟strcat函数的实现
strcat函数是一个衔接函数将两个字符串连接起来
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* arr1, const char* arr2)
{
char* ret = arr1;
assert(arr1 && arr2);
do
{
arr1++;
} while (*arr1 != '\0'); //用do-while循环指向arr1数组的末尾字符
while (*arr1++ = *arr2++) //用while循环将arr2数组衔接到arr1数组后面
{
;
}
return ret;
}
int main()
{
char arr1[] = { "hello " };
char arr2[] = { "world!" };
my_strcat(arr1, arr2);
printf("%s", arr1);
return 0;
}
注意:其中strcpy函数与strcat数组函数形式与库函数中的形式是一样的,都为char*类型返回值都为其首元素的地址,