分享

模拟实现C库函数strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove

 quasiceo 2017-11-19


1、模拟实现strcpy

  1. char *my_strcpy( char *dest, const char *str)  
  2. {  
  3.     assert(dest != NULL);  
  4.     assert(str != NULL);  
  5.     while (*dest++=*str++)  
  6.     {  
  7.         ;  
  8.     }  
  9.     return dest;  
  10. }  
  11. int main()  
  12. {  
  13.     char p[20];  
  14.     char *p1 = "world";  
  15.     my_strcpy(p, p1);  
  16.     printf("%s\n", p);  
  17.     system("pause");  
  18.     return 0;  
  19. }  

2、模拟实现strcat
  1. char* my_strcat(char*dest, const char* str)  
  2. {  
  3.     assert(dest != NULL);  
  4.     assert(str != NULL);  
  5.     char *ret = dest;  
  6.     while (*dest)  
  7.     {  
  8.         dest++;  
  9.     }  
  10.     while (*str)  
  11.     {  
  12.         *dest++ = *str++;  
  13.     }  
  14.     return ret;  
  15. }  
  16. int main()  
  17. {  
  18.     char p[20] = "hello ";  
  19.     my_strcat(p, "world");  
  20.     printf("%s", p);  
  21.     system("pause");  
  22.     return 0;  
  23. }  


3、模拟实现strstr
  1. char* my_strstr(const char *dest, const char*str)  
  2. {  
  3.     assert(dest != NULL);  
  4.     assert(str != NULL);  
  5.     char *ret = (char*)dest;  
  6.     char *cur = (char*)str;  
  7.     while (*cur)  
  8.     {  
  9.         if ((*ret) && (*cur) && (*ret++ = *cur++))  
  10.         {  
  11.             return cur;  
  12.         }  
  13.         cur++;  
  14.     }  
  15.     return NULL;  
  16. }  
  17.   
  18. int main()  
  19. {  
  20.     char p[] = "abcdefd";  
  21.     char* p1 = "defr";  
  22.     char* ret = NULL;  
  23.     ret= strstr(p, p1);  
  24.     if (ret == NULL)  
  25.     {  
  26.         printf("no");  
  27.     }  
  28.     else  
  29.     {  
  30.         printf("%s", ret);  
  31.     }  
  32.     system("pause");  
  33. }  

4、模拟实现strchr
  1. char* my_strchr(const char*dest, int x)  
  2. {  
  3.     assert(dest != NULL);  
  4.     char*ret = (char*)dest;  
  5.     while (*ret)  
  6.     {  
  7.         if ((*ret) && (*ret == x))  
  8.         {  
  9.             return ret;  
  10.         }  
  11.         ret++;  
  12.     }  
  13.     return NULL;  
  14. }  
  15.   
  16. int main()  
  17. {  
  18.     char p[] = "abcdefg";  
  19.     char*ret=my_strchr(p, 'f');  
  20.     if (ret == NULL)  
  21.     {  
  22.         printf("no\n");  
  23.     }  
  24.     else  
  25.     {  
  26.         printf("%s", ret);  
  27.     }  
  28.     system("pause");  
  29.       
  30. }  
5、模拟实现strcmp
  1. int my_strcmp(const char*str1, const char*str2)  
  2. {  
  3.     assert(str1 != NULL);  
  4.     assert(str2 != NULL);  
  5.     while (*str1==*str2)  
  6.     {  
  7.         if (*str1 == '\0')  
  8.         {  
  9.             return 0;  
  10.         }  
  11.         *str1++;  
  12.         *str2++;  
  13.     }  
  14.     if (*str1 > *str2)  
  15.     {  
  16.         return 1;  
  17.     }  
  18.     else if (*str1 < *str2)  
  19.     {  
  20.         return -1;  
  21.     }  
  22. }  
  23.   
  24. int main()  
  25. {  
  26.     char p1[] = "dccbcc";  
  27.     char p2[] = "dccccc";  
  28.     int ret = my_strcmp(p1, p2);  
  29.     printf("%d\n", ret);  
  30.     system("pause");  
  31. }  

6、模拟实现memcpy

  1. void*my_memcpy(void*dest, const void*str, size_t sz)  
  2. {  
  3.     assert(dest != NULL);  
  4.     assert(str != NULL);  
  5.     char* ret = (char*)str;  
  6.     char* cur = (char*)dest;  
  7.     while (sz--)  
  8.     {  
  9.         *cur++ = *ret++;  
  10.     }  
  11.     return dest;  
  12. }  
  13.   
  14. int main()  
  15. {  
  16.     char p1[20] = { 0 };  
  17.     char* p2 = "world";  
  18.     my_memcpy(p1, p2, 4);  
  19.     printf("%s\n", p1);  
  20.     system("pause");  
  21.     return 0;  
  22. }  

7、模拟实现memmove
  1. void* my_memmove(void*dest, const void*str, size_t len)  
  2. {  
  3.     assert(dest != NULL);  
  4.     assert(str != NULL);  
  5.     char *pdest = (char*)dest;  
  6.     char* pstr = (char*)str;  
  7.     if ((pstr < pdest) && (pdest < pstr + len))  
  8.     {  
  9.         while (len--)  
  10.         {  
  11.             *(pdest+len) = *(pstr+len);  
  12.         }  
  13.     }  
  14.     else  
  15.     {  
  16.         while (len--)  
  17.         {  
  18.             *pdest++ = *pstr++;  
  19.         }  
  20.     }  
  21.     return dest;  
  22. }  
  23. int main()  
  24. {  
  25.     char p[] = "abcdefgh";  
  26.     my_memmove(p, p+2, 4);  
  27.     printf("%s", p);  
  28.     system("pause");  
  29.     return 0;  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多