手动实现c字符串的基本函数

1.strlen函数

原型:size_t strlen(const char *str),计算字符串的长度

int my_strlen(const char *str){
    int count = 0;
    assert(str != nullptr);
    while(*str != '\0'){
        count++;
        str++;
    }
    return count;
}

2.strcpy函数

原型:char *strcpy(char *dest, const char *src),将src指向的字符串复制到dest中

char *my_strcpy(char *str_des, const char *str_source){
    assert(str_des != nullptr);
    assert(str_source != nullptr);
    char *ret = str_des;
    while((*str_des++ = *str_source++) != '\0'){
        ;
    }
    return ret;
}

3.strcat函数

原型:char *strcat(char *dest, const char *src),将src指向的字符串追加到dest指向的字符串结尾。

char *my_strcat(char *str_des, const char *str_source){
    assert(str_des != nullptr);
    assert(str_source != nullptr);
    char *ret = str_des;
    while(*str_des){
        str_des++;
    }
    while((*str_des++ = *str_source++) != '\0'){
        ;
    } 
    
    return ret;
    
}

4.strcmp函数

原型:int strcmp(const char *str1, const char *str2),把str1指向的字符串和str2指向的字符串进行比较,小于返回一个小于零的值,大于返回一个大于零的值,相等返回0

int my_strcmp(const char *str1, const char *str2){
    while(*str1 && *str2){
        if(*str1 == *str2){
            str1++;
            str2++;
        }
        else if(*str1 > *str2)return -1;
        else return 1;
    }
    if(*str1)return 1;
    if(*str2)return -1;
    return 0;
}

5.strchr函数

原型:char *strchr(const char *str, int c),在参数str所指向的字符串中搜索第一次出现字符c的位置,如果未找到返回NULL

char *my_strchr(const char *str, char c){
    while(*str++ != '\0'){
        if(*str == c)return str;
    }
    return NULL;
}

6.strstr函数

原型:char *strstr(const char *haystack, const char *needle),在字符串haystack中查找第一次出现字符串needle的位置,不包括终止符’\0’

char *my_strstr(char *str1, char *str2){
    const char *index1;
    const char *index2;
    if(!str1 || !str2)return str1;
    
    //遍历str1字符串
    while(*str1){
        index1 = str1;
        index2 = str2;
        do{
            if(!*index2)return str1;
        }while(*index1++ == *index2++);
        str1++;
    }
    return NULL;
    
}