一、模拟实现strlen函数
方法1:遍历字符串,用计数器算出字符串长度
#include<stdio.h>
//第一种:计数器法
int my_strlen(char* p)
{
assert(p!=NULL)//用宏来判断一下,若括号中为假则会报错,这部可省略
int count = 0;
while (*p!='\0')
{
count++;
p++;
}
return count;
}
int main()
{
char arr[256];
printf("请输入要计算的字符串:");
gets(arr);
int len=my_strlen(arr);
printf("字符串长度为:%d", len);
}
方法2:递归计算字符串长度
#include<stdio.h>
int my_strlen(char* p)
{
if (*p == '\0')
return 0;
else
return 1 + my_strlen(p + 1);//递归调用my_strlen
}
int main()
{
char arr[256];
printf("请输入要计算的字符串:");
gets(arr);
int len = my_strlen(arr);
printf("字符串长度为:%d", len);
}
方法3:指针-指针
#include<stdio.h>
// 指针 - 指针差值的绝对值 = 指针和指针之间的元素个数
//指针-指针的前提条件是:两个指针指向同一块区域,指针类型是相同的
int my_strlen(char* p)
{
char* start = p;
while (*p != '\0')
p++;
return p - start;
}
int main()
{
char arr[256];
printf("请输入要计算的字符串:");
gets(arr);
int len = my_strlen(arr);
printf("字符串长度为:%d", len);
}
运行结果:
二、模拟实现strcpy函数
这是strcpy函数的功能,是将source中的数据复制到destination中,为了防止source中的数据被改变加上了const来修饰,注意:(1)destination的长度要大于source的长度(2)source中的‘\0’也会被复制过去
方法1:一个一个字符复制过去
#include<stdio.h>
void my_strcpy(char* dest, char* src)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//将'\0'复制过去
}
int main()
{
char arr1[20] = "xxxxxxxxxxxxxx";
char arr2[] = "hello world";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
}
方法2: 简化方法1
#include<stdio.h>
//此方法直接将'\0'复制过去,不用再单独复制
void my_strcpy(char* dest, char* src)
{
while (*dest++=*src++)
{
;
}
}
int main()
{
char arr1[20] = "xxxxxxxxxxxxxx";
char arr2[] = "hello world";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
}
方法三:严格按照原strcpy模拟实现
#include<stdio.h>
char * my_strcpy(char* dest, const char* src)
{
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "xxxxxxxxxxxxxx";
char arr2[] = "hello world";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
}
运行结果: