2019_4_11.c

字符串操作函数

  1. strcpy
char* my_strcpy(char* dest, const char* src)
{
 assert(dest != NULL && src != NULL);
 char* arr = dest;
 while ((*dest++ = *src++) != '\0');
 return arr;
}
  1. strcat
char* my_strcat(char* dest, const char* src)
{
 assert(dest != NULL && src != NULL);
 char* arr = dest;
 while (*dest != '\0')
 {
  dest++;
 }
 while ((*dest++ = *src++) != '\0');
 return arr;
}
  1. strstr
char* my_strstr(const char* str, const char* substr)
{
 assert(str != NULL && substr != NULL);
 if (*substr == '\0')
 {
  return (char*)str;
 }
 char* str1 = NULL;
 char* str2 = NULL;
 char* rst = (char*)str;
 while (*rst != '\0')
 {
  str1 = rst;
  str2 = (char*)substr;
  while (*str2 != '\0' && *str1 == *str2)
  {
   ++str1;
   ++str2;
  }
  if (*str2 == '\0')
  {
   return rst;
  }
  ++rst;
 }
 return NULL;
}
  1. strchr
char* my_strchr(const char *str, char ch)
{
 assert(str != NULL);
 char* s = (char*)str;
 while (*s != '\0')
 {
  if (*s == ch)
  {
   return s;
  }
  ++s;
 }
 return NULL;
}
  1. strcmp
int my_strcmp(const char* lhs, const char* rhs)
{
 assert(lhs != NULL && rhs != NULL);
 char* str1 = (char*)lhs;
 char* str2 = (char*)rhs;
 while (*str1 != '\0' && *str2 != '\0')
 {
  if (*str1 < *str2)
  {
   return -1;
  }
  else if (*str1 > *str2)
  {
   return 1;
  }
  else
  {
   ++str1;
   ++str2;
  }
 }
 if (*str1 == '\0' || *str2 == '\0')
 {
  if (*str1)
  {
   return 1;
  }
  else if (*str2)
  {
   return -1;
  }
 }
 return 0;
}
  1. memcpy
void* my_memcpy(void *dest, const void *src, size_t count)
{
 assert(dest != NULL && src != NULL);
 void* rst = dest;
 while (count--)
 {
  *(unsigned char*)dest = *(unsigned char*)src;
  ++(unsigned char*)dest;
  ++(unsigned char*)src;
 }
 return rst;
}
  1. memmove
void* my_memmove(void* dest, const void* src, size_t count)
{
 assert(dest != NULL && src != NULL);
 void* rst = dest;
 if (dest <= src || (unsigned char*)dest >= (unsigned char*)src + count)
 {
  while (count--)
  {
   *(unsigned char*)dest = *(unsigned char*)src;
   ++(unsigned char*)dest;
   ++(unsigned char*)src;
  }
 }
 else
 {
  while (count)
  {
   *((unsigned char*)dest + count - 1) = *((unsigned char*)src + count - 1);
   count--;
  }
 }
 return rst;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值