C 语言 字符串处理函数的实现

#include <stdio.h>
#include <assert.h>

int strcmp(const char *dset, const char * source)
{
    assert((dset != NULL) && (source != NULL)); //出错处理
    int ret = 0;    
    while(((ret = (*dset++ - *source++)) == 0) && (*dset != '\0'));//比较
    if(ret < 0){  //((ret > 0 )? 1 : ((ret < 0) ? - 1 : 0)));
        return -1;  
    } else if(ret > 0){
        return 1;
    } else {
        return 0;
    }
}


int my_strlen(const char *p)
{
    int i = 0;
    while(*p){
        p++;
        i++;
    }
    return i;
}

char* my_strcat(char *desc, const char * str)
{
    if((desc == NULL)||(str == NULL)){
        if(desc == NULL)
            puts("desc my_strcat the illegal parameter!!!");
        else
            puts("str my_strcat the illegal parameter!!!");     
        return NULL;
    }
    while(*desc)
        desc++;
    while(*desc++ = *str++);
    return desc;
}

char* my_strcpy(char *desc, const char *str)
{
    if((desc == NULL)||(str == NULL)){
        if(desc == NULL)
            puts("desc my_strcpy the illegal parameter!!!");
        else
            puts("str my_strcpy the illegal parameter!!!");     
        return NULL;
    }
    char * tmp = desc;
    while(*desc++ = *str++);
    return tmp;
}

void * my_memcpy(void *desc,const void *str,size_t sizet)
{
    if((desc == NULL)||(str == NULL)){
        if(desc == NULL)
            puts("desc my_strcpy the illegal parameter!!!");
        else
            puts("str my_strcpy the illegal parameter!!!");     
        return NULL;
    }
    char *tmp1 = (char *)desc;
    char *tmp2 = (char *)str;
    int i = 0;
    for(i = 0; i < sizet; i++){
        *tmp1++ = *tmp2++;
    }
    return tmp1;
}


int main(void)
{
    char str1[30] = "hello china";
    char str2[10] = " I`m here";

    printf("length of str is %d\n",my_strlen(str1));    //length of str is 11

    my_strcat(str1,str2);   
    puts(str1);     //hello china I`m here

    my_strcpy(str1,str2);   
    puts(str1);     //I`m here

    my_memcpy(str1,str2,sizeof str2);   
    puts(str1);     //I`m here
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值