模擬實現strcpy、strcat、strstr、strtcmp

模擬實現strcpy:字符串拷貝

char *my_strcpy(char *dst,const char *src)
{
    assert(dst);
    assert(src);
    char *ret = dst;
    while(*dst && *src)
    {
        *dst = *src;
        dst++;
        src++;
    }
    return ret;
}

模擬實現strcat:字符串拼接

char *my_strcat(char *dst,const char *src)
{
    assert(dst);
    assert(src);

    //先找到dst的'\0'
    while(*dst++)
        ;
    //再把src的內容一一賦值給dst'\0'往後
    while((*dst++ = *src++))
        ;

    return ret;
}

模擬實現strstr:查找子串

char *my_strstr(const char *dst,const char *substr)
{
    assert(dst);
    assert(substr);
    char *ret = (char *)dst;
    char *cmp_tmp = (char *)dst;
    while(*ret != '\0')
    {
        cmp_tmp = ret;
        char *sub_tmp = (char *)substr;
        while(*cmp_tmp && *sub_tmp && (*cmp_tmp == *sub_tmp) )
        {
            cmp_tmp++;
            sub_tmp++;
        }
        if(*sub_tmp == '\0')
        {
            return ret;
        }
        else
            ret++;
    }
    return NULL;
}

模擬實現strcmp:字符串比較

int my_strcmp(const char *str1,const char *str2)
{
    assert(str1);
    assert(str2);
    unsigned char *s1 = (unsigned char *)str1;
    unsigned char *s2 = (unsigned char *)str2;
    while(*s1 && *s2)
    {
        //先比較ASCII碼的大小
        if(*s1 == *s2)
        {
            s1++,s2++;
        }
        else if(*s1 > *s2)
        {
            //str1大於str2
            return 1;
        }
        else
            //str1小於str2
            return -1;
    }
    //s1沒走完,s2走完了,說明s1比s2長
    //則s1大
    if(*s1)
    {
        return 1;
    }
    //s2沒走完,s1走完了,說明s1比s2短
    //即s2大
    else if(*s2)
    {
        return -1;
    }
    //相等
    else return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章