模拟实现库函数
strlen的自我实现
方法一 :计数器原理
int my_strlen1(const char* p)//模拟实现库函数strlen 方法一:计数器方式
{
int count = 0;
while (*p)
{
p++;
count++;
}
return count;
}
方法二:递归方式
int my_strlen2(const char* p)//模拟实现库函数strlen 方法二:递归方式
{
if ((*p) == '\0')
{
return 0;
}
else {
return 1 + my_strlen2(p+1);
}
}
方法三:指针方式
int my_strlen3(const char* p)//模拟实现库函数strlen 方法三:指针原理
{
char* s = p;
while (*p != '\0')
{
p++;
}
return p - s;
}
strcpy的自我实现
char* my_strcpy(char* dest, const char* src)//模拟实现库函数strcpy
{
char* ret = dest; //定义一个指针变量存储字符数组首元素的地址
assert(dest != NULL); //包含头文件<assert.h>,如果传参为空会报错,并提示出错行数
assert(src != NULL);
while (*dest++ = *src++)//将src的值赋给dest,然后往后加,当src走到'\0'的位置赋值给dest,
{ //while的判断为假,相当于while('\0'),循环结束。
;
}
return ret; //返回字符数组首元素的地址
}
strcat的自我实现
char* my_strcat(char* dest, const char* src)//模拟实现strcat
{
char* ret = dest;
assert(dest != NULL); //包含头文件<assert.h>,如果传参为空会报错,并提示出错行数
assert(src != NULL);
while (*dest) //指针指向目标数组的结尾
{
dest++;
}
while (*dest++ = *src++)//从结尾开始赋值,实现字符串的拼接
{
;
}
return ret; //返回目标数组首元素的地址
}
strcmp的自我实现
int my_strcmp(const char* dest, const char* src)
{
int ret = 0;
assert(dest != NULL); //包含头文件<assert.h>,如果传参为空会报错,并提示出错行数
assert(src != NULL);
//循环判断src与dest是否相等,不相等或src与dest走到结尾时结束,并依靠ret的值进行返回
while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && *src && *dest)
{
src++;
dest++;
}
if (ret > 0)
{
return 1;
}
else if(ret<0)
{
return -1;
}
else
{
return ret;
}
}