字符串功能的模拟实现

作业

1.实现strcpy
2.实现strcat
3.实现strstr
4.实现strchr
5.实现strcmp
6.实现memcpy
7.实现memmove

1.

//模拟strcpy
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strcpy(char *dest,const char *src)
{
    char *ret=dest;
    assert(dest);
    assert(src);
    while(*dest++=*src++)
    {
        ;
    }
    return ret;
}
int main()
{
    char arr1[]="abcdef";
    char arr2[]="123456";
    printf("%s\n",my_strcpy(arr1,arr2));
    system("pause");
    return 0;
}

2.

//.模拟strcat
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strcat(char *dest,const char *src)
{
    char *ret=dest;
    assert(dest);
    assert(src);
    while(*dest)
    {
        dest++;
    }
    while(*dest++=*src++)
    {
        ;
    }
    return ret;
}
int main()
{
    char arr1[]="abcdef";
    char arr2[]="123456";
    printf("%s\n",my_strcat(arr1,arr2));
    system("pause");
    return 0;
}

3.

//模拟strstr(寻找子串)
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strstr(char *arr1, const char *arr2)
{
    assert(arr1);
    assert(arr2);
    char *s1=(char *) arr1;
    char *s2=(char *) arr2;
    char *ret=NULL;
    if(*arr2=='\0')
    {
        return NULL;
    }
    while(*s1)
    {
        ret=s1;
        s2=(char *)arr2;
        while(*ret&&*s2&&(*ret==*s2))
        {
          ret++,s2++;
        }
        if(*s2=='\0')
        {
            return s2;
        }
        s1++;
  }
}
int main()
{
    char arr1[]="abcdef123abc";
    char arr2[]="abc";
//    printf("");
    char *pd=my_strstr(arr1,arr2);
    if(pd!=NULL)
    {
        printf(yes!\n ");
    }
    else
      printf("no!\n");
    system("pause");
    return 0;
}

4.

//.模拟strchr
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strstr(char *arr1, const char *arr2)
{
    assert(arr1);
    assert(arr2);
    char *s1=(char *) arr1;
    char *s2=(char *) arr2;
    char *ret=NULL;
    if(*arr2=='\0')
    {
        return NULL;
    }
    while(*s1)
    {
        ret=s1;
        s2=(char *)arr2;
        while(*ret&&*s2&&(*ret==*s2))
        {
          ret++,s2++;
        }
        if(*s2=='\0')
        {
            return s2;
        }
        s1++;
  }
}
int main()
{
    char arr1[]="abcdef123abc";
    char arr2[]="abc";
//    printf("");
    char *pd=my_strstr(arr1,arr2);
    if(pd!=NULL)
    {
        printf("找到了!\n ");
    }
    else
      printf("没找到!\n");
    system("pause");
    return 0;
}

5.
//模拟strcmp

#include <stdio.h>
#include <windows.h>
#include <assert.h>
int my_strcmp(char *src,const char *dst)
{
    assert(dst);
    assert(src);
    int ret=0;
    while(!(ret=*(unsigned char *)src-*(unsigned char *)dst)&&*dst)
    {
        ++src,++dst;
    }
    if(ret<0)
    ret=-1;
    else if(ret>0)
    ret=1;
    return (ret);
}
int main()
{
    char arr1[]="abcdef";
    char arr2[]="ab";
    int ret=my_strcmp(arr1,arr2);
    if(ret)
    {
      printf("第一个\n");
    }
    else
    {
        printf("第二个\n");
    }

    system("pause");
    return 0;
}

6.

//.实现memcpy
#include <stdio.h>
#include <windows.h>
#include <assert.h>
void *my_memcpy(void *dst,const void *src,size_t count)
{
    assert(dst);
    assert(src);
    void *ret=dst;
    while(count--)
    {
      *(char *)dst=*(char *)src;
      dst=(char *)dst+1;
      src=(char *)src+1;
    }
    return (ret);
}
int main()
{
    char arr1[]="abcdef";
    char arr2[]="123456";
    printf("%s\n",my_memcpy(arr1,arr2,3));
    system("pause");
    return 0;
}

7.
//.实现memmove
#include <stdio.h>
#include <windows.h>
#include <assert.h>
void *my_memmove(void *dst,const void *src,size_t count)
{
    assert(dst);
    assert(src);
    void *ret=dst;
    if(dst<src||(char *)dst>=((char *)src+count))  //从左往右拷贝
    {
    while(count--)
    {
      *(char *)dst=*(char *)src;
      dst=(char *)dst+1;
      src=(char *)src+1;
    }
    }
    else  //从有开始拷贝
    {
        dst=(char *)dst+count-1;
      src=(char *)src+count-1;
      while(count--)
    {
      *(char *)dst=*(char *)src;
      dst=(char *)dst-1;
      src=(char *)src-1;
    }
    }

    return (ret);
}
int main()
{
    char arr1[]="abcdfgh";
    char arr2[]="123456";
    printf("%s\n",my_memmove(arr1,arr2,5));
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lao_wine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值