第三十六题 标准库字符操作函数的实现

来源:互联网 发布:java实现加减乘除 编辑:程序博客网 时间:2024/05/21 19:31
char *strcpy(char *dst,char *src){assert(dst!=nullptr&&src!=nullptr);if (dst==src){return dst;}char *returnstr=dst;while ((*dst++=*src++)!='\0');return returnstr;}char *strncpy(char *dst,char *src,int count){assert(dst!=nullptr&&src!=nullptr);char *resultstr=dst;while(count--&&src!='\0'){*dst++=*src++;}*dst='\0';return dst;}int strchr(const char *str, char c)  {assert(str!=nullptr);    for (size_t i=0;*(str+i)!='\0';++i)    {if (*(str+i)==c){return i;}    }return 0;}int strcmp(const char *s, const char *t)     {     assert(s != NULL && t != NULL);     while (*s && *t && *s == *t)     {     ++ s;     ++ t;     }     return (*s - *t);     }char *strcat(char *strDes, const char *strSrc)     {     assert((strDes != nullptr) && (strSrc != nullptr));     char *address = strDes;     while (*strDes != '\0')     ++ strDes;     while ((*strDes ++ = *strSrc ++) != '\0');     return address;     } int strlen(const char *str)     {     assert(str != nullptr);     int len = 0;     while (*str ++ != '\0')     ++ len;     return len;     } char *strdup_(char *strSrc)           {       if(strSrc!=nullptr)       {       char *start=strSrc;       int len=0;       while(*strSrc++!='\0')       len++;       char *address=(char *)malloc(len+1);       assert(address != nullptr);    while((*address++=*start++)!='\0'){}return address-(len+1);        }       return nullptr;       }    char *strstr(const char *strSrc, const char *str)     {     assert(strSrc != nullptr && str != nullptr);     const char *s = strSrc;     const char *t = str;     for (; *strSrc != '\0'; ++ strSrc)     {     for (s = strSrc, t = str; *t != '\0' && *s == *t; ++s, ++t){}if (*t == '\0')     return (char *) strSrc;     }     return nullptr;     } char *strncat(char *strDes, const char *strSrc, unsigned int count)     {     assert((strDes != nullptr) && (strSrc != nullptr));     char *address = strDes;     while (*strDes != '\0')     ++ strDes;     while (count -- && *strSrc != '\0' )     *strDes ++ = *strSrc ++;     *strDes = '\0';     return address;     }     int strncmp(const char *s, const char *t, unsigned int count)     {     assert((s != nullptr) && (t != nullptr));     while (*s && *t && *s == *t && count --)     {     ++ s;     ++ t;     }     return (*s - *t);     }     char *strpbrk(const char *strSrc, const char *str)     {     assert((strSrc != nullptr) && (str != nullptr));     const char *s;     while (*strSrc != '\0')     {     s = str;     while (*s != '\0')     {     if (*strSrc == *s)     return (char *) strSrc;     ++ s;     }     ++ strSrc;     }     return nullptr;     }     int strcspn(const char *strSrc, const char *str)     {     assert((strSrc != nullptr) && (str != nullptr));     const char *s;     const char *t = strSrc;     while (*t != '\0')     {     s = str;     while (*s != '\0')     {     if (*t == *s)     return t - strSrc;     ++ s;     }     ++ t;     }     return 0;     }     int strspn(const char *strSrc, const char *str)     {     assert((strSrc != nullptr) && (str != nullptr));     const char *s;     const char *t = strSrc;     while (*t != '\0')     {     s = str;     while (*s != '\0')     {     if (*t == *s)     break;     ++ s;     }     if (*s == '\0')     return t - strSrc;     ++ t;     }     return 0;     }     char *strrchr(const char *str, int c)     {     assert(str != nullptr);     const char *s = str;     while (*s != '\0')     ++ s;     for (-- s; *s != (char) c; -- s)     if (s == str)     return nullptr;     return (char *) s;     }     char* strrev(char *str)     {     assert(str != nullptr);     char *s = str, *t = str, c;     while (*t != '\0')     ++ t;     for (-- t; s < t; ++ s, -- t)     {     c = *s;     *s = *t;     *t = c;     }     return str;     }     char *strnset(char *str, int c, unsigned int count)     {     assert(str != nullptr);     char *s = str;     for (; *s != '\0' && s - str < count; ++ s)     *s = (char) c;     return str;     }     char *strset(char *str, int c)     {     assert(str != nullptr);     char *s = str;     for (; *s != '\0'; ++ s)     *s = (char) c;     return str;     }       char *strtok(char *strToken, const char *str)    {    assert(str != nullptr);    static char *last;    if (strToken == nullptr && (strToken = last) == nullptr)    return nullptr;    char *s = strToken;    const char *t = str;    while (*s != '\0')    {    t = str;    while (*t != '\0')    {    if (*s == *t)    {    last = s + 1;    if (s - strToken == 0) {    strToken = last;    break;    }    *(strToken + (s - strToken)) = '\0';    return strToken;    }    ++ t;    }    ++ s;    }    return nullptr;    }    char *strupr(char *str)     {     assert(str != nullptr);     char *s = str;     while (*s != '\0')     {     if (*s >= 'a' && *s <= 'z')     *s -= 0x20;     s ++;     }     return str;     }     char *strlwr(char *str)     {     assert(str != nullptr);     char *s = str;     while (*s != '\0')     {     if (*s >= 'A' && *s <= 'Z')     *s += 0x20;     s ++;     }     return str;     }     void *memcpy(void *dest, const void *src, unsigned int count)     {     assert((dest != nullptr) && (src != nullptr));     void *address = dest;     while (count --)     {     *(char *) dest = *(char *) src;     dest = (char *) dest + 1;     src = (char *) src + 1;     }     return address;     }     void *memccpy(void *dest, const void *src, int c, unsigned int count)     {     assert((dest != nullptr) && (src != nullptr));     while (count --)     {     *(char *) dest = *(char *) src;     if (* (char *) src == (char) c)     return ((char *)dest + 1);     dest = (char *) dest + 1;     src = (char *) src + 1;     }     return nullptr;     }     void *memchr(const void *buf, int c, unsigned int count)     {     assert(buf != nullptr);     while (count --)     {     if (*(char *) buf == c)     return (void *) buf;     buf = (char *) buf + 1;     }     return nullptr;     }     int memcmp(const void *s, const void *t, unsigned int count)     {     assert((s != nullptr) && (t != nullptr));     while (*(char *) s && *(char *) t && *(char *) s == *(char *) t && count --)     {     s = (char *) s + 1;     t = (char *) t + 1;     }     return (*(char *) s - *(char *) t);     }      void *memmove(void *dest, const void *src, unsigned int count)     {    assert(dest != nullptr && src != nullptr);    char* pdest = (char*) dest;    char* psrc = (char*) src;    //pdest在psrc后面,且两者距离小于count时,从尾部开始移动. 其他情况从头部开始移动    if (pdest > psrc && pdest - psrc < count)     {    while (count--)     {    *(pdest + count) = *(psrc + count);    }    } else     {    while (count--)     {    *pdest++ = *psrc++;    }    }    return dest;    }    void *memset(void *str, int c, unsigned int count)     {     assert(str != nullptr);     void *s = str;     while (count --)     {     *(char *) s = (char) c;     s = (char *) s + 1;     }     return str;     }    

0 0
原创粉丝点击