zoukankan      html  css  js  c++  java
  • 不使用库函数、自己编写的(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 }
  • 相关阅读:
    Mac php使用gd库出错 Call to undefined function imagettftext()
    centos 使用 locate
    Mac HomeBrew 安装 mysql
    zsh 命令提示符 PROMPT
    新的开始
    Java 面试题分析
    Java NIO Show All Files
    正确使用 Volatile 变量
    面试题整理 2017
    有10阶梯, 每次走1,2 or 3 阶,有多少种方式???
  • 原文地址:https://www.cnblogs.com/-zyj/p/5407283.html
Copyright © 2011-2022 走看看