一:实现模拟strlen函数
1.0:使用计数器的方法实现
首先定义一个字符数组,然后统计这字符数组的字符数。将他传递给my_strlen函数
#include<stdio.h>
#include<assert.h>
int my_strlen(char* str)
{
//到这里我们确保一下指针的有效性
assert(str);
//定义一个计数器
int count = 0;
while (*str != '\0')
{
*str++;
count++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
2.0:使用递归的方法不创建临时变量计数器
这里我们直接从函数的内部开始讲起,用指针接受咱们的一个字符数组,然后用const进行修饰不让其进行改变。如果等于\0也就是我们的字符数组已经到了结尾那就返回0,否则就返回我们的1加上(str+1)将他们作为一个整体再次传递给my_strlen函数这样就相当于跳过了刚刚的+1的那一个字符,从他的后面再次进行计数如此循环直到结束。
int my_strlen(const char* str)
{
assert(str);
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr[] = "abcdef";
int ret = my_strlen(arr);
printf("%d\n", ret);
}
3.0:运行截图
二:实现模拟拷贝字符串的函数strcpy
注意:在这里头文件需要加上#include<assert.h>
首先定义两个数组将数组1的内容拷贝到数组2里面去首先用const修饰一下src防止源字符数组被修改,然后定义目标字符数组的指针也就是我们要拷贝到的位置,确保两个指针都有效的情况下进行拷贝我们让dest=src只要src!不等于\0就一直拷贝下去直到结束。
char* my_strcpy(char* dest, const char* src)
{
//保证指针的有效性
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr[] = "abcdef";
char arr2[20] = { 0 };
my_strcpy(arr2, arr);
printf("%s\n", arr2);
return 0;
}
运行截图:
三:实现追加字符串函数
首先我们定义两个字符类型的数组arr1和arr2,在这里我们将arr2拷贝到arr1里面去。这里从函数部分开始讲解,定义目标变量和源变量采用指针的形式,然后用ret接收一下dest的首字符的地址,方便后续return进行一个返回从首字符开始打印。然后用assert确保一下指针的有效性,先找到dest的最后一个字符然后从这个字符开始追加,每次追加一个之后都记性一次++。最后返回ret就可以。
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
//确保指针的有效性
assert(dest && src);
//找到目标字符串的尾部
while (*dest)
{
dest++;
}
//实现追加
while ((*dest++=*src++))
{
;
}
return ret;
}
int main()
{
char arr1[20] = "abcdef";
char arr2[20] = "ghi";
my_strcat(arr1,arr2);
printf("%s\n", arr1);
return 0;
}