c语言实现strcpy、strcmp和strcat

//求字符串长度的函数
int my_strlen(const char* pStr)
{
    assert(pStr != NULL);
    int length = 0;
    while (*pStr++ != '\0')  
    {
        length++;
    }
    return length;
}
//字符串拷贝函数
char* my_strcpy(char* strDest, const char* strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    char* pDest = strDest;    //保护参数
    const char* pSrc = strSrc;
    while (*pSrc != '\0')
    {
        *pDest++ = *pSrc++;
    }
    *pDest = '\0'; 
    return strDest;
}
//字符串比较函数
int my_strcmp(const char* strDest, const char* strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    if (*strDest == '\0'&&*strSrc != '\0')
    {
        return 0;
    }
    const char* pDest = strDest;
    const char* pSrc = strSrc;
    int result = 0;  //用于记录比较结果
    while (*pDest != '\0' || *pSrc != '\0')
    {
        if ((result = *pDest - *pSrc) != 0)    
        {
            break;    //当两字符串不相等时跳出,相等是继续往后指
        }
        pDest++;
        pSrc++;
    }
    if (result > 0)
    {
        result = 1;
    }
    else if (result<0)
    {
        result = -1;
    }
    return result;
}
//字符串连接函数
char* my_strcat(char* strDest, char* strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    char* pDest = strDest;
    char* pSrc = strSrc;
    while(*pDest != '\0')  //先将pDest指到字符串末尾
    {
        pDest++;
    }
    while (*pSrc != '\0')
    {
        *pDest++ = *pSrc++;
    }
    *pDest = '\0';
    return strDest;
}
void Test()
{
    char c1[5] = "abcd";
    char c2[4] = "123";
    char c3[20] = "123456";
    printf("c1-length:%d\n", my_strlen(c1));
    printf("my_strcpy(c1,c2):%s\n", my_strcpy(c1, c2));
    //printf("%s\n", my_strcpy(c1, c3));   //不能处理这种超出范围的,程序会崩溃!!
    printf("my_strcmp(c1,c2):%d\n", my_strcmp(c1, c2));
    printf("my_strcmp(c2,c3):%d\n", my_strcmp(c2, c3));
    printf("my_strcat(c3,c2):%s\n",my_strcat(c3,c2));
}

 

posted @ 2019-06-09 10:58  unique_ptr  阅读(544)  评论(0编辑  收藏  举报