[C语言]模拟实现strstr,strcat,strcmp,strcpy,strlen

strstr

strstr函数声明:

char *strstr( const char *str1, const char *str2 );

该函数在str1中找str2,如果找到了,返回str2在str1中第一次出现的地址,没找到返回NULL。

模拟实现

char* m_strstr(char* arr1,const char* arr2)
{
    assert(arr1 != NULL && arr2 != NULL);
    char* a1 = arr1;
    char* a2 = (char*)arr2;
    if (*arr2 == 0)
    {
        return NULL;
    }
    while (*arr1)
    {
        a1 = arr1;
        a2 = (char*)arr2;
        while (*a1 && *a2 && (*a1 == *a2))
        {
            a1++;
            a2++;
        }
        if (*a2 == '\0')
        {
            return arr1;
        }
        arr1++;
    }
    return 0;
}

strcat

函数声明
char *strcat(char *dest, const char *src)
该函数能在dest后追加src的内容

模拟实现

char* m_strcat(char* arr1, char* arr2)
{
    char* p = arr1;
    while (*arr1 != 0)
    {
        arr1++;
    }
    while (*arr2 != 0)
    {
        *arr1++ = *arr2++;
    }
    return p;
}

strcmp

函数声明
int strcmp(const char *s1,const char *s2);
该函数自左向右逐个按照ASCII码值进行比较,直到出现不同的字符或遇’\0’为止。
如果返回值 < 0,则表示 s1 小于 s2。
如果返回值 > 0,则表示 s1 大于 s2。
如果返回值 = 0,则表示 s1 等于 s2。

模拟实现

int my_strcmp(char* arr1, char* arr2)
{
    assert(arr1);
    assert(arr2);
    int ret = 0;
    while (!(ret = (unsigned char*)*arr1 - (unsigned char*)*arr2)&&*arr2)
    {
        arr1++;
        arr2++;
    }
    if (ret < 0)
    {
        return -1;
    }
    else if (ret == 0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
int main()
{
    char arr1[] = "abcde";
    char arr2[] = "abq";
    printf("%d ", strcmp(arr1, arr2));
}

strcpy

函数声明
char* strcpy(char* destination,const char* source);
该函数能将source开始的字符串复制到destination

模拟实现

char* my_strcpy(char* arr1, char* arr2)
{
    if (arr1 == NULL || arr2 == NULL)
    {
        return NULL;
    }
    else
    {
        char* p = arr1;
        while ((*arr1++ = *arr2++) != '\0')
        {
            ;
        }
        return p;
    }
}
int main()
{
    char arr1[] = "hello world";
    char arr2[] = "k";
    ;
    printf("%s\n", my_strcpy(arr1, arr2));
}

strlen

函数声明
size_t strlen( const char *string );
该函数能计算字符串长度

int My_strlen(char *str)
{
    int count = 0;
    while (*str)
    {
        count++;
        str++;
    }
    return count;
}
int main()
{
    char str[] = "hello world";
    printf("%d", My_strlen(str));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值