【程序代码】--- string函数实现

  1. strlen
  2. strcpy
  3. strcmp
  4. strcat
  5. strncpy
  6. strncmp
  7. strncat

strlen

返回字符串长度,不计算’\0’


int my_strlrn(const char *str)
{
    assert(str != NULL);
    int len = 0;
    while (*str++ != '\0')
    {
        len++;
    }
    return len;
}

strcpy

拷贝字符串


char *my_strcpy(char *dst, const char *src)
{
    assert((dst != NULL)&&(src != NULL) )
    while ((*dst++ = *src++) != '\0') ;
    return dst;
}

strcmp

比较两个字符串str1,str2,相同输出0,str1 < str2反回-1,str1 > str2返回1


int my_strcmp(const char *str1, const char *str2)
{
    assert((str1 != NULL)&&(str2 != NULL));
    int ret = 0;
    while (ret = (*(unsigned char *)str1++) - (*(unsigned char *)str2++) 
            && *str1 != '\0' )
    {
        if ( ret = 0)
        {
            return 0;
        }
        else if(ret < 0)
        {
            return -1;
        }
        else
        {
            return 1;
        }
    }   
}

strcat

字符串拼接函数


char *my_strcat(char *dst, const char *src)
{
    assert((dst != NULL)&&(src != NULL));
    char *tmp = dst;
    while (*tmp != '\0')
    {
        tmp++;
    }
    while ((*tmp++ = *src++) != '\0') ;
    return dst;
}

strncpy

拷贝字符串前n位


char *my_strncpy(char *dst, const char *src, size_t len)
{
    assert((dst != NULL)&&(src != NULL) )
    char *tmp = dst;
    while(len--)
    {
        *dst++ = *src++;
    }
    return dst;
}

strncmp

比较字符串前n位


int my_strcmp(const char *str1, const char *str2, size_t n)
{
    assert((str1 != NULL)&&(str2 != NULL));
    int ret = 0;
    while (ret = (*(unsigned char *)str1++) - (*(unsigned char *)str2++) 
    && n-- && *str1 != '\0' && *str2 != '\0')
    {
        if (ret < 0)
        {
            return -1;
        }
        if (ret > 0)
        {
            return 1;
        }
    }   
    if (*str1 == '\0' && *str2 != '\0')
    {
        return -1;
    }
    if (*str1 != '\0' && *str2 == '\0')
    {
        return 1;
    }
    return 0;
}

strncat

在字符串结尾拼接n个字符


char *my_strncat(char *dst, const char *src, size_t n)
{
    assert((str1 != NULL)&&(str2 != NULL));
    char *res = dst;
    while(*res++ != '\0') ;
    while (n-- && (*res++ = *src++)!='\0') ;
    return res;
}

猜你喜欢

转载自blog.csdn.net/Mr_HHHHH/article/details/82120328