模拟实现str--以及mem--

第一种方法是用计数器模拟实现strlen函数。  
#include<stdio.h>  
#include<assert.h>  
int my_strlen(const char *str)  
{  
    int count = 0;  
    assert(str!=NULL);  
    while(*str)  
    {  
        str++;  
        count++;  
    }  
    return count;  
}  
int main()  
{  
    int ret = 0;  
    char arr[10]="abcdefgh";  
    ret = my_strlen(arr);  
    printf("%d\n",ret);  
    return 0;  
}  
第二种方法是用指针减指针的方法模拟实现strlen函数。  
1.0
#include<stdio.h>  
int my_strlen(const char *str)  
{  
    const char *p = str;  
    while(*p)           //while(*p++)
    {                   //{
        p++;            //   ;
    }                   //}
    return p-str;       //return p-str-1
}  
int main()  
{  
    int ret = 0;  
    char arr[10]="abcdefgh";  
    ret = my_strlen(arr);  
    printf("%d\n",ret);  
    return 0;  
} 

 
第三种是用函数递归的方法模拟实现strlen函数。  
#include<stdio.h>  
int my_strlen(const char *str)  
{  
    if(*str=='\0')  
        return 0;  
    else  
    return 1+my_strlen(str+1);  
}  
int main()  
{  
    int ret = 0;  
    char arr[10]="abcdefgh";  
    ret = my_strlen(arr);  
    printf("%d\n",ret);  
    return 0;  
}  
1.模拟实现strcpy
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char *my_strcpy(char *dst, const char *src)
{
    assert(dst != NULL);
    assert(src != NULL);
    char *ret = dst;
    while (*dst++ = *src++)
        ;
    return ret;
}
int main()
{
    char arr1[] = "hello world!!!";
    char arr2[20];
    my_strcpy(arr2, arr1);
    printf("%s\n", arr2);
    system("pause");
      return 0;
}
3.模拟实现strcat
char* my_strcat(char* dest,char* src)
{
  char *cp=dest;
  assert(src && dest);
  while(*dest!='\0')
  {
    dest++;
  }
  while(*dest++=*src++)
  {
    ;
  }
 return cp;
}

int main()
{
   char arr1[15]="abcd";
   char *arr2="ef";
   printf("%s\n",my_strcat(arr1,arr2));
   return 0;
}
4.模拟实现strcmp
int my_strcmp(char* arr1,char* arr2)
{
  assert(arr1 && arr2)
  while(*arr1==*arr2)
  {
   if(*arr1=='\0')
     return 0;
  }
 return *arr1-*arr2;
}

int main()
{
 char *arr1="abcde";
 char *arr2="abcd";
 int ret=my_strcmp(arr1,arr2);
 printf("%d\n",ret);
}
5.模拟实现strstr
#include<stdio.h>
#include<assert.h>

const char *my_strstr(const char* src, const char* dest)
{
const char* str1 = src;
const char* str2 = dest;
const char* start = NULL;
assert(str1);
assert(str2);
if (*str2 == '\0')
{
return str1;
}
while (*str1)
{
start = str1;
while ((*str1) && (*str2) && (*str1 == *str2))
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return start;
}
str1 = start + 1;
str2 = dest;
}
return NULL;
}
int main()
{
const char* src = "abbbcedf";
const char* dest = "bce";
    char *ret=my_strstr(src, dest);
if (NULL == ret)
{
printf("not exit");
}
else
{
printf("exit");
}
system("pause");
return 0;
}
6.模拟实现memcpy
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void* my_memcpy(void* dest, const void* src, size_t n)  
{  
    assert(dest);  
    assert(src);  
    char* pdest = (char*)dest;  
    const char* psrc = (const char*)src;  
    while (n--)  
    {  
        *pdest++ = *psrc++;  
    }  
    return dest;  
}
int main ()
{
  char str1[]="Sample string";
  char str2[40];
  my_memcpy (str2,str1,strlen(str1)+1);
  printf ("str1: %s\nstr2: %s\n",str1,str2);
  return 0;
}
7.模拟实现memmove
void* my_memmove(void* dest, void* src, size_t n)  
{  
    void* ret = dest;  
    char* str1 = (char*)dest;  
    char* str2 = (char*)src;  
    assert(dest);  
    assert(src);  
    if (str1 > str2)   
    {  
        while (n--)  
        {  
            *(str1 + n) = *(str2 + n);  
        }  
    }  
    else  
    {  
        while (n--)  
        {  
            *str1++ = *str2++;  
        }  
    }  
    return ret;  
}  
int main()  
{  
    int i = 0;   
    int arr3[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };   
    my_memmove(arr3 + 5, arr3 + 4, 3 * sizeof(int));  
      
    for (i = 0; i < 10; i++)  
    {  
        printf("%d ", arr3[i]);  
    }  
    system("pause");  
    return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值