• 不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)


    不使用库函数、自己编写的(strlen、strcpy、strcmp、strcat、memcmp、memcpy、memmove)

      1 //求字符串长度的函数
      2 int my_strlen(const char* pStr)
      3 {
      4 assert(pStr != NULL);
      5 int length = 0;
      6 while (*pStr++ != '') 
      7 {
      8 length++;
      9 }
     10 return length;
     11 }
     12 //字符串拷贝函数
     13 char* my_strcpy(char* strDest, const char* strSrc)
     14 {
     15 assert(strDest != NULL && strSrc != NULL);
     16 char* pDest = strDest; //保护参数
     17 const char* pSrc = strSrc;
     18 while (*pSrc != '')
     19 {
     20 *pDest++ = *pSrc++;
     21 }
     22 //*pDest = '';
     23 return strDest;
     24 }
     25 //字符串比较函数
     26 int my_strcmp(const char* strDest, const char* strSrc)
     27 {
     28 assert(strDest != NULL && strSrc != NULL);
     29 if (*strDest == ''&&*strSrc != '')
     30 {
     31 return 0;
     32 }
     33 const char* pDest = strDest;
     34 const char* pSrc = strSrc;
     35 int result = 0; //用于记录比较结果
     36 while (*pDest != '' || *pSrc != '')
     37 {
     38 if ((result = *pDest - *pSrc) != 0) 
     39 {
     40 break;
     41 }
     42 pDest++;
     43 pSrc++;
     44 }
     45 if (result > 0)
     46 {
     47 result = 1;
     48 }
     49 else if (result<0)
     50 {
     51 result = -1;
     52 }
     53 return result;
     54 }
     55 //字符串连接函数
     56 char* my_strcat(char* strDest, char* strSrc)
     57 {
     58 assert(strDest != NULL && strSrc != NULL);
     59 char* pDest = strDest;
     60 char* pSrc = strSrc;
     61 while(*pDest != '') 
     62 {
     63 pDest++;
     64 }
     65 while (*pSrc != '')
     66 {
     67 *pDest++ = *pSrc++;
     68 }
     69 *pDest = '';
     70 return strDest;
     71 }
     72 
     73 //内存比较函数
     74 int my_memcmp(void* src1, void* src2, int len)
     75 {
     76 assert(src1 != NULL && src2 != NULL);
     77 const char* pSrc1 = (char*)src1;
     78 const char* pSrc2 = (char*)src2;
     79 while (len-- > 0)
     80 {
     81 if (*pSrc1++ != *pSrc2++) 
     82 {
     83 return *pSrc1 < *pSrc2 ? -1 : 1;
     84 }
     85 }
     86 return 0; 
     87 }
     88 
     89 //内存拷贝函数
     90 void* my_memcpy(void* dest, const void* src, size_t count)
     91 {
     92 assert(dest != NULL && src != NULL);
     93 char* pDest = (char*)dest;
     94 const char* pSrc = (const char*)src;
     95 while (count-- > 0)
     96 {
     97 *pDest++ = *pSrc++;
     98 }
     99 return dest;
    100 }
    101 
    102 //内存移动函数
    103 void* my_memmove(void* dest, void* src, size_t count)
    104 {
    105 assert(dest != NULL && src != NULL);
    106 char* pDest = (char*)dest;
    107 const char* pSrc = (char*)src;
    108      if (pSrc >= pDest || pDest >= (pSrc + count))
    109 {
    110 
    111 
    112     while (count-- > 0)
    113         {
    114              *pDest++ = *pSrc;
    115        }
    116 }
    117 else
    118  {
    119       while (count-- > 0)
    120 
    121           {
    122 
    123               *(pDest + count) = *(pSrc + count);
    124          }
    125 }
    126 *pDest = '';
    127 return dest;
    128 }
  • 相关阅读:
    常用Linux命令:ls/cd/pwd/mkdir/rm/mv/cp
    设计模式(5)---代理模式
    设计模式(4)---装饰模式
    设计模式(3)---基本原则
    设计模式(2)---策略模式
    设计模式(1)---简单工厂模式
    linux系统硬件配置查看方法
    boost.asio系列(一)——deadline_timer
    ubuntu 安装JDK
    计算图像数据集的RGB均值
  • 原文地址:https://www.cnblogs.com/-zyj/p/5407283.html
Copyright © 2020-2023  润新知