模拟实现strlen的三种方式
//模拟实现strlen的三种方式
#include<stdio.h>
#include<assert.h>
int my_strlen1(const char * str)//计数器方式
{
int count = 0;
assert(str != NULL);
while (*str)
{
count++;
str++;
}
return count;
}
int my_strlen2(const char * str)//递归
{
assert(str != NULL);
if (*str == '\0')
return 0;
else
return 1 + my_strlen2(str + 1);
}
int my_strlen3(char * str)//指针
{
char *p = str;
while (*p != '\0')
p++;
return p - str;
}
int main()
{
char arr[] = "abcdef";
int len1 = my_strlen1(arr);
int len2 = my_strlen2(arr);
int len3 = my_strlen3(arr);
printf("%d\n", len1);
printf("%d\n", len2);
printf("%d\n", len3);
system("pause");
return 0;
}
模拟实现strcpy
char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while ((*dest++ = *src++))
{
;
}
return ret;
}
模拟实现strcat
char *my_strcat(char*dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while (*dest)
{
dest++;
}
while ((*dest++ = *src++))
{
;
}
return ret;
}
模拟实现strstr
char *my_strstr(const char*str,const char * substr)
{
const char *s1;
const char *s2;
const char *cur = str;
assert(str != NULL);
assert(substr != NULL);
if (*substr == '\0')
return (char*)str;
while (*cur)
{
s1 = cur;
s2 = substr;
while (*s1&&*s2 && (*s1 == *s2))
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)str;
}
cur++;
}
return NULL;
}
int main()
{
const char *p = "abcdef";
char *ret = my_strstr(p, "def");
if (ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}
模拟实现strchr
char *my_strchr(const char *dest, const char c)
{
assert(dest!=NULL);
while (*dest)
{
if (*dest == c)
{
return dest;
}
dest++;
}
return NULL;
}
int main()
{
const char *p = "abcdef";
char *ret = my_strchr(p, "d");
if (ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}
模拟实现strcmp
int my_strcmp(char* src, const char* dest)
{
while (*src = *dest)
{
if (*src == '\0')
{
return 0;
}
src++;
dest++;
}
return *src - *dest;
}
int main()
{
const char *p = "abqdef";
const char *q = "abbbbbbbb";
int ret = my_strcmp(p, q);
if(ret >0)
{
printf("p>q\n");
}
else if(ret <0)
{
printf("p<q\n");
}
else
{
printf("p==q\n");
}
return 0;
}
模拟实现memcpy
void * my_memcpy(void *dest,void *src,int count)
{
void *ret = dest;
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
模拟实现memmove
void* my_memmove(void *dest, const void*src, size_t count)
{
void *ret = dest;
assert(dest != NULL);
assert(src != NULL);
if (dest<src)
{
//前->后
while(count--)
{
*(char *)dest = *(char*)src;
dest = (char *)dest+1;
src = (char*)src+1;
}
}
else
{
//后->前
while(count--)
{
*((char *)dest+count) = *((char*)src+count);
}
}
return ret;
}
int main()
{
int arr1[10] = {0};
int arr2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
my_memcpy(arr2, arr1, 20);
return 0;
}